TJU-3848 Game(矩阵乘法快速幂)
来源:互联网 发布:linux中grep命令 编辑:程序博客网 时间:2024/05/20 23:32
一看是递推的关系,明显是矩阵乘法快速幂了。
这里举个例子,假设有3个选手,有n场比赛,得分记为Si
如果有以下关系:
S1=S1+2S3;
S2=S2+1S1+1S3;
S3=S3+5S2;
则可以用以下的矩阵乘法表示
1 1 0
(S1 S2 S3)=(S1 S2 S3)×(0 1 5)^n
2 1 1
代码写的难看,如果错误,还请指正:
#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int nn; //实际矩阵边长const int N=50; //乘矩阵边长最大值long long M; //要模的数struct Matrix{ long long f[N][N]; void Init0() { memset(f,0,sizeof(f)); }};Matrix Matrix_mul(Matrix a,Matrix b){ int i,j,k; Matrix ans; ans.Init0(); for(i=0;i<nn;i++) for(j=0;j<nn;j++) for(k=0;k<nn;k++) { ans.f[i][j]+=a.f[i][k]*b.f[k][j]; ans.f[i][j]%=M; } return ans;}Matrix QuickPow(Matrix a,int n){ int i,j,k; Matrix ans,mul; mul=a; ans.Init0(); for(i=0;i<nn;i++) ans.f[i][i]=1; while(n) { if(n&1) ans=Matrix_mul(ans,mul); mul=Matrix_mul(mul,mul); n>>=1; } return ans;}void work(){ int i,j,k,n; int D,S,K,ai,di; long long sum,ans; Matrix a,b; a.Init0(); //初始值矩阵 b.Init0(); //系数矩阵//读入选手数、模、比赛场数scanf("%d%lld%d",&nn,&M,&n);//系数矩阵初始化for(i=0;i<nn;i++)b.f[i][i]=1;for(i=0;i<nn;i++){scanf("%d%d%d",&D,&S,&K);a.f[0][D-1]=S;for(j=0;j<K;j++){scanf("%d%d",&di,&ai);b.f[di-1][D-1]=ai;}}//进行矩阵乘法快速幂b=QuickPow(b,n);/*for(i=0;i<nn;i++) printf("%lld ",a.f[0][i]); printf("\n");printf("\n");for(i=0;i<nn;i++){for(j=0;j<nn;j++) printf("%lld ",b.f[i][j]);printf("\n");}*/ans=0;for(j=0;j<nn;j++){sum=0;for(i=0;i<nn;i++) sum=(sum+a.f[0][i]*b.f[i][j])%M;if(sum>ans) ans=sum;}printf("%lld\n",ans);}int main(){ int T; scanf("%d",&T); while(T--) work(); return 0;}
0 0
- TJU-3848 Game(矩阵乘法快速幂)
- poj3070(矩阵快速幂,矩阵乘法)
- 矩阵乘法&&快速幂
- 矩阵乘法 矩阵快速幂
- hdu1575(矩阵乘法快速幂)
- Tr A(矩阵乘法快速幂)
- Fibonacci数列(矩阵乘法快速幂)
- Fibonacci数列(矩阵乘法快速幂)
- 数列(矩阵乘法+快速幂)
- 矩阵(加法&&乘法&&快速幂)
- Xn数列(矩阵乘法+快速幂+慢速乘法)
- 矩阵快速幂,矩阵加法,矩阵乘法
- TOJ 3848 Game 矩阵快速幂
- poj 3070 Fibonacci + 矩阵乘法(矩阵快速幂)
- [NOI2013]矩阵游戏(矩阵乘法+十进制快速幂)
- bzoj3240: [Noi2013]矩阵游戏(矩阵乘法+快速幂)
- 矩阵乘法快速幂模板
- 矩阵的乘法和矩阵快速幂
- 如何自己编写Makefile(高级篇)
- iOS 开发中手机号 价格金额 有效性判断
- cdlinux可以安装在c盘
- Sending the User to Another App
- 最新版本的Hive 0.13发布,增加ACID特性
- TJU-3848 Game(矩阵乘法快速幂)
- Leetcode 124 Binary Tree Maximum Path Sum 二叉树最大路径和
- grep命令小结
- Ubuntu下使用搜狗输入法出现fcitx进程CPU占用过高情况
- C# 方法参数(默认参数)
- css中单位px和em,rem的区别
- hdu 5280 Senior's Array(dp)
- android layout parser
- 深入理解JavaScript原型链