Vijos P1067Warcraft III 守望者的烦恼
题目
背景
守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看完所有的监狱,只是从入口进入,然后再从出口出来就算完成任务了。
描述
头脑并不发达的warden最近在思考一个问题,她的闪烁技能是可以升级的,k级的闪烁技能最多可以向前移动k个监狱,一共有n个监狱要视察,她从入口进去,一路上有n个监狱,而且不会往回走,当然她并不用每个监狱都视察,但是她最后一定要到第n个监狱里去,因为监狱的出口在那里,但是她并不一定要到第1个监狱。
守望者warden现在想知道,她在拥有k级闪烁技能时视察n个监狱一共有多少种方案?
格式
输入格式
第一行是闪烁技能的等级k(1<=k<=10)
第二行是监狱的个数n(1<=n<=2^31-1)
输出格式
由于方案个数会很多,所以输出它 mod 7777777后的结果就行了
样例1
样例输入1[复制]
2 4
样例输出1[复制]
5
限制
各个测试点1s
提示
把监狱编号1 2 3 4,闪烁技能为2级,
一共有5种方案
→1→2→3→4
→2→3→4
→2→4
→1→3→4
→1→2→4
小提示:建议用int64,否则可能会溢出
题解
这道题目是矩阵,我竟然有点忘记矩阵乘法了QAQ赶快再做几题!
代码
1 /*Author:WNJXYK*/ 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 const int M=7777777; 7 int n,siz; 8 long long mul[11][11],ans[11]; 9 inline void mTimes(long long a[],long long b[][11]){ 10 long long c[11]; 11 memset(c,0,sizeof(c)); 12 for (int i=1;i<=siz;i++){ 13 for (int j=1;j<=siz;j++){ 14 c[i]=(c[i]+a[j]*b[i][j])%M; 15 } 16 } 17 memcpy(a,c,sizeof(c)); 18 } 19 inline void mTimes(long long a[][11],long long b[][11]){ 20 long long d[11][11]; 21 memset(d,0,sizeof(d)); 22 for (int i=1;i<=siz;i++){ 23 for (int j=1;j<=siz;j++){ 24 for (int k=1;k<=siz;k++){ 25 d[i][j]=(d[i][j]+a[i][k]*b[k][j])%M; 26 } 27 } 28 } 29 memcpy(a,d,sizeof(d)); 30 } 31 32 int main(){ 33 scanf("%d%d",&siz,&n); 34 ans[0]=1; 35 for (int i=1;i<=siz;i++){ 36 for (int j=0;j<i;j++){ 37 ans[i]+=ans[j]; 38 } 39 } 40 for (int i=1;i<=siz;i++)mul[siz][i]=1; 41 for (int i=2;i<=siz;i++)mul[i-1][i]=1; 42 n--; 43 while(n){ 44 if (n&1) mTimes(ans,mul); 45 n/=2; 46 mTimes(mul,mul); 47 } 48 printf("%lld\n",ans[1]); 49 return 0; 50 }
View Code
转载于:https://www.cnblogs.com/WNJXYK/p/4070804.html
Vijos P1067Warcraft III 守望者的烦恼相关推荐
- vijos 1067 Warcraft III 守望者的烦恼 矩阵
题目链接 我们可以很容易的推出dp的式子, dp[i] = sigma(j : 1 to k) dp[i-j]. 但是n太大了, 没有办法直接算, 所以我们构造一个矩阵, 然后快速幂就好了. 就像这样 ...
- Warcraft III 守望者的烦恼
题目描述 头脑并不发达的warden最近在思考一个问题,她的闪烁技能是可以升级的,k级的闪烁技能最多可以向前移动k个监狱,一共有n个监狱要视察,她从入口进去,一路上有n个监狱,而且不会往回走,当然她并 ...
- 18.03.26 vijos1067Warcraft III 守望者的烦恼
背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫"闪烁",这个技能可以把她传送到后面的监狱内查看, ...
- 【Vijos】1431 守望者的逃离
题目链接:https://vijos.org/p/1431 算法:贪心 描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者 在与尤迪安的交锋中遭遇了围杀,被困在一个 ...
- 【技巧总结】——DP
DP 那些奇奇怪怪的dp LIS 二分法(nlogn)求 输出方案 LCS的巧妙想法 基础式子 计算方案 区间dp( n 3 n^3 n3) 线性dp 破环成链 递归型 转换对象 背包 普通背包 &q ...
- 【最大费用流】【最优匹配】丘比特的烦恼 Vijos 1169
Vijos-P1169丘比特的烦恼 Accepted 描述 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适 ...
- 【每日DP】day 5、P1095 守望者的逃离(好像悟到了DP的真谛)难度⭐⭐★
P1095 守望者的逃离 输入 39 200 4 输出 No 197 输入 36 255 10 输出 Yes 6 好像悟到了DP的真谛(doge) 动态规划,就是动态地维护当前的状态. 本题种状态是距 ...
- 啊哈c语言读后感500字,《麦田里的守望者》读后感读书笔记500字五篇
<<麦田里的守望者>读后感读书笔记500字五篇>由会员分享,可在线阅读,更多相关<<麦田里的守望者>读后感读书笔记500字五篇(5页珍藏版)>请在人人文 ...
- [VIJOS]lxhgww的奇思妙想
Vijos lxhgww的奇思妙想 题面 lxhgww 在树上玩耍时,LZX2019 走了过来.lxhgww 突然问道:"我现在的k级祖先是谁?" LZX2019 答道:" ...
最新文章
- 如何设计恒流源输出电路?
- 6小时完成,Jeff Dean领衔AI设计芯片方案登Nature,谷歌第四代TPU已用 芯快递 今天...
- SQLMAP使用笔记
- 随机数尽可能做到不重复
- sql server规范
- js setTimeout和setInterval区别
- Java编程中忽略这些细节,Bug肯定找上你
- Python基础语法和数据类型最全总结
- gp3688 uhf2扩频_摩托罗拉GP3688对讲机(VHF、UHF)对讲机维修
- Mac搭建PHP+rabbitMQ环境
- 华为堡垒机_浪潮无线分析,华为云堡垒机
- 滴滴自动驾驶首轮融资超5亿美元 加大研发投入 助力“新基建”
- 用c语言编写linux守护进程
- 类数据源Visual C++对ODBC数据库资源的访问
- 可执行文件内存补丁文件补丁工具
- 爬取服务器主机信息,魔兽世界怀旧服,基于WclPlayerScore数据二次爬取的各服务器分层人口普查及精英玩家比例...
- html表格标题标签_HTML标题标签
- 可编译易用的模块化nf-HiPAC移植成功
- 中国移动云mas短信对接(http)
- 看集装箱号码识别技术如何解决港口拥堵
热门文章
- Python Django jsonpickle序列化隐藏部分字段代码示例
- Python Django HttpResponse响应对象
- jvm最大内存限制多少?
- RabbitMQ消息confirm确认机制
- GridFS删除文件代码示例
- sublime text常用快捷键及多行光标批量操作教程
- 【示例】Lucene查询索引库编程步骤
- Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can
- spark写mysql优化简书_spark——通过jdbc连接数据库中遇到的问题
- java中的解码和编码_关于java中编码和解码(一)