VOJ 1067 Warcraft III 守望者的烦恼 (矩阵快速幂+dp)
来源:互联网 发布:3dmax unity3d 编辑:程序博客网 时间:2024/05/18 20:09
题目链接
显然可知
dp[n] = dp[n-k] + dp[n-k+1] + ... +dp[n-1];
然后要用矩阵来优化后面的状态转移。
也就是矩阵
0 1 0 0 a b
0 0 1 0 * b = c
0 0 0 1 c d
1 1 1 1 d a+b+c+d
然后跑快速幂
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>#define N 10using namespace std;const int mod = 7777777;typedef long long LL;struct matrix{ LL a[10][10];}origin;int n,m;matrix multiply(matrix x,matrix y){ matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { for(int k=0;k<n;k++) { temp.a[i][j]+=x.a[i][k]*y.a[k][j]; temp.a[i][j]=(temp.a[i][j])%mod; } } } return temp;}matrix matmod(matrix A,int k){ matrix res; memset(res.a,0,sizeof res.a); for(int i=0;i<n;i++)res.a[i][i]=1; while(k) { if(k&1) res=multiply(res,A); k>>=1; A=multiply(A,A); } return res;}void print(matrix x){ for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<" "<<x.a[i][j]; puts(""); } printf("---------------\n");}int main(){ int k; while(cin>>n>>k) { memset(origin.a,0,sizeof origin.a); origin.a[0][0]=1; for(int i=1;i<=n;i++) { origin.a[i][0]=1; for(int j=0;j<i;j++) { origin.a[i][0]+=origin.a[j][0]; } } // print(origin); matrix res; memset(res.a,0,sizeof res.a); for(int i=0;i<n-1;i++) { res.a[i][i+1]=1; } for(int i=0;i<n;i++)res.a[n-1][i]=1; //print(res); res=matmod(res,k-1); LL fans=0; for(int i=0;i<n;i++) { fans+=res.a[0][i]*origin.a[i][0]; fans%=mod; } cout<<fans<<endl; } return 0;}
0 0
- VOJ 1067 Warcraft III 守望者的烦恼 (矩阵快速幂+dp)
- Warcraft III 守望者的烦恼 Vijos 矩阵快速幂
- voj 1067 守望者的烦恼 矩阵快速幂
- vijos1067 Warcraft III 守望者的烦恼(矩阵倍增)
- Warcraft III 守望者的烦恼
- 矩阵十题【七】vijos 1067 Warcraft III 守望者的烦恼
- [Vijos 1067] Warcraft III 守望者的烦恼 · 矩阵乘法
- 矩阵经典题目七:Warcraft III 守望者的烦恼(矩阵加速递推)
- 矩阵十大经典题目之七- Warcraft--III--守望者的烦恼
- vijosP1067Warcraft III 守望者的烦恼
- 【NOIP practice】BSOJ 1709 守望者的烦恼 矩阵快速幂优化递推
- 【矩阵乘法】守望者的烦恼
- 【vijos1067】【矩阵乘法】守望者的烦恼
- voj 1067 经典矩阵7 递推+矩阵快速幂
- vijos1067Warcraft III 守望者的烦恼——by rfy
- voj 1049 送给圣诞夜的礼品 矩阵快速幂
- VIJOS1067 守望者的烦恼
- vijos P1067 守望者的烦恼
- 作为一个优秀程序必须了解的知识
- 编程路上,遇到的一些学习网站
- 一句话搞定TNS-12537、TNS-12560、TNS-00507、Linux Error:29 错误组合
- Thirft框架介绍
- 成为ITer的第二步
- VOJ 1067 Warcraft III 守望者的烦恼 (矩阵快速幂+dp)
- VMware虚拟机下Linux NAT方式联网
- Pig安装过程
- 关于Android调用webservice
- My deep learning reading list (转)
- flex正则表达式
- Thrift 入门指南
- C#简单图片浏览器
- 最新maven项目 tomcat热部署