18.03.26 vijos1067Warcraft 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,否则可能会溢出
来源
杜杜我爱你个人原创
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <stdlib.h> 5 #include <math.h> 6 7 using namespace std; 8 const int maxn=20,mod=7777777; 9 long long int f[maxn];//存放到第几个监狱时的走法 10 11 struct mat{ 12 long long int a[maxn][maxn]; 13 }res,ans; 14 15 //matrix multiply j1*j2 n dimension(square) 16 mat cheng1(mat j1,mat j2,int n){ 17 mat tmp; 18 for(int i=1;i<=n;i++) 19 for(int j=1;j<=n;j++) 20 tmp.a[i][j]=0; 21 for(int i=1;i<=n;i++) 22 for(int j=1;j<=n;j++) 23 for(int k=1;k<=n;k++) 24 tmp.a[i][j]=(j1.a[i][k]*j2.a[k][j])%mod+tmp.a[i][j]; 25 return tmp; 26 } 27 28 29 //quickpow k dimension n multi_n 30 mat qp(int k,int n){ 31 for(int i=1;i<=k;i++) 32 for(int j=1;j<=k;j++){ 33 if(i==j)ans.a[i][j]=1; 34 else ans.a[i][j]=0; 35 } 36 while(n){ 37 if(n&1) 38 ans=cheng1(res,ans,k); 39 res=cheng1(res,res,k); 40 n>>=1; 41 } 42 return ans; 43 } 44 45 int main() 46 { 47 int k,n;//k级 n个 48 scanf("%d%d",&k,&n); 49 f[0]=1; 50 for(int i=1;i<=k;i++){ 51 f[i]=0; 52 for(int j=i-1;j>=0&&j>=i-k;j--){ 53 f[i]+=f[j]; 54 } 55 } 56 for(int i=1;i<=k-1;i++){ 57 res.a[i][i+1]=1; 58 res.a[k][i]=1; 59 } 60 res.a[k][k]=1; 61 res=qp(k,n-k); 62 long long int m[maxn]={0}; 63 for(int j=1;j<=k;j++){ 64 m[k]+=res.a[k][j]*f[j]; 65 } 66 printf("%lld\n",m[k]%mod); 67 return 0; 68 }
View Code
大概是矩阵快速幂优化dp的经典题型,学习了
状态转移方程非常好想,所以一开始天真的我想用滚动数组把它全部循环一遍
然而数据太大了……当然是没法过的
所以要用矩阵乘法来缩短时间,算法了解一下->点这里
然后就是那个mod777...7……这句话我看了很久才明白是啥意思……
不过改完还是wa了几次,40分,原因是我只是在结果那边简单地%了一下mod(这有个毛用啊)
其实中间计算的时候数据就已经溢出了
所以又改了一下矩阵乘法计算过程中的数,因为反正都相当于是减了很多个mod所以对最后结果没有什么影响
转载于:https://www.cnblogs.com/yalphait/p/8650130.html
18.03.26 vijos1067Warcraft III 守望者的烦恼相关推荐
- Vijos P1067Warcraft III 守望者的烦恼
题目 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫"闪烁",这个技能可以把她传送到后面的监狱内 ...
- Warcraft III 守望者的烦恼
题目描述 头脑并不发达的warden最近在思考一个问题,她的闪烁技能是可以升级的,k级的闪烁技能最多可以向前移动k个监狱,一共有n个监狱要视察,她从入口进去,一路上有n个监狱,而且不会往回走,当然她并 ...
- vijos 1067 Warcraft III 守望者的烦恼 矩阵
题目链接 我们可以很容易的推出dp的式子, dp[i] = sigma(j : 1 to k) dp[i-j]. 但是n太大了, 没有办法直接算, 所以我们构造一个矩阵, 然后快速幂就好了. 就像这样 ...
- Linux TUN/TAP 虚拟网卡编程入门https://backreference.org/2010/03/26/tuntap-interface-tutorial/...
原文: https://backreference.org/2010/03/26/tuntap-interface-tutorial/ (为防和谐,下文中p=屁) Tun/Tap interface ...
- matlab 模拟交易,股票量化投资策略模拟交易系统 [2017.03.26 更新]
本帖最后由 heawjc 于 2017-3-27 17:13 编辑 本系统允许自主研发量化投资策略并进行模拟交易,从2000多只A股中自动选取并交易:策略研发完成即可对历史行情数据进行模拟调试,验证其 ...
- http://www.cnblogs.com/Bear-Study-Hard/archive/2008/03/26/1123267.html
http://www.cnblogs.com/Bear-Study-Hard/archive/2008/03/26/1123267.html 转载于:https://www.cnblogs.com/m ...
- 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)
传送门 题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4 ...
- 18.03.21 继承作业
A:全面的MyString 描述 程序填空,输出指定结果 #include <cstdlib> #include <iostream> using namespace std; ...
- 18.03.28 vijos1071新年趣事之打牌
描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:"这副牌少了几张!"众人一 ...
最新文章
- 面向对象模型的四种核心技术
- unity中app实现拖拽_10分钟让你实现在APP中对网络状态变化进行全局提示
- Gogs-Windows Server下搭建Git服务器
- linux管理磁盘和文件系统
- 第三章 改进神经网络的学习方式(上)
- linux 下安装java
- linux 故障注入_基于chaosblade的故障注入平台小试
- loginButton.setOnClickListener(this);这里为什么要用this呢?
- Hologres揭秘:如何支持超高QPS在线服务(点查)场景
- RMI原理揭秘之远程方法调用
- ios修改了coredata数据结构后,更新安装会闪退
- 7-2 是否完全二叉搜索树 (30分)
- 六元均匀直线阵的各元间距为_小间距led显示屏的封装方式有哪些?本文带你了解!...
- 你真的了解什么是项目管理吗?
- K3CLOUD业务系统编码规则设置
- 基于OpenPose的人体姿态检测
- win10系统开启扫描仪服务器,win10通用扫描仪安装步骤
- 2021 Java面试真题集锦
- pip换源 conda换源
- Javascript 实现的 CXK 打篮球游戏
热门文章
- 免费流量越来越难,付费推广势在必行
- HDU 5514 Frogs(欧拉函数+数论YY)
- 用python实现合数分解
- 关于超宽屏21:9显示器不能调节正确分辨率的解决办法
- 计算机启动硬盘自检,硬盘自检怎么关闭-电脑启动时硬盘自检的解决方法 - 河东软件园...
- [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂
- 计算机961考研试题,2008年北京航空航天大学961计算机专业综合考研试题
- 固网+G网业务营销方案
- Linux32位和64位系统的区别及如何选择?
- 基于云服务创建实时运营数据分析服务(三)