版权声明:请大家斧正,如喜欢的话,为拙见点一个赞吧。 https://blog.csdn.net/qq_39897867/article/details/84861871
题目
https://www.luogu.org/problemnew/show/P3390#sub
解题思路
这道题就是矩阵乘法的模板题,注意一下 这个初始化就可以了。
代码
#include<cstdio>
#include<iostream>
#include<cstring>
#define WYC 1000000007
#define LL long long
#define rep(i,x,y) for(register long long i=x;i<=y;i++)
using namespace std;
LL n,kk,f[1001][1001],a[1001][1001],c[1001][1001];
inline LL read()
{
LL p=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) p=(p<<3)+(p<<1)+c-48,c=getchar();
return p;
}
void mull()
{
memset(c,0,sizeof(c));
rep(i,1,n) rep(j,1,n) rep(k,1,n) c[i][j]=c[i][j]%WYC+a[i][k]*a[k][j]%WYC;
memcpy(a,c,sizeof(c));
}
void mul()
{
memset(c,0,sizeof(c));
rep(i,1,n) rep(j,1,n) rep(k,1,n) c[i][j]=c[i][j]%WYC+f[i][k]*a[k][j]%WYC;
memcpy(f,c,sizeof(c));
}
int main()
{
n=read(),kk=read();
rep(i,1,n) rep(j,1,n) a[i][j]=read(),f[i][i]=1;
for(;kk;mull(),kk>>=1) if (kk&1) mul();
rep(i,1,n) {rep(j,1,n) printf("%lld ",f[i][j]%WYC); putchar(10);}
}