http://acm.hdu.edu.cn/showproblem.php?pid=1575
分析:矩阵的n次幂(和求x^n相同),再求主对角线的和
如:http://blog.youkuaiyun.com/killua_99/article/details/8565937
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int NUM=9973;
int a[15][15],r[15][15];
int n,k;
void getMix(int a[15][15],int b[15][15])
{
int i,j,k;
int sum[15][15];
memset(sum,0,sizeof(sum));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
sum[i][j]+=a[i][k]*b[k][j]; //某行x某列
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=sum[i][j]%NUM;
}
int getTra(int k)
{
int i,ans;
memset(r,0,sizeof(r));
for(i=1;i<=n;i++) //单位矩阵
r[i][i]=1;
while(k>1)
{
if(k&1) getMix(r,a);
getMix(a,a);
k=k>>1;
}
getMix(a,r);
ans=0;
for(i=1;i<=n;i++)
ans+=a[i][i]%NUM;
return ans%NUM;
}
int main()
{
int i,j,T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
printf("%d\n",getTra(k));
}
return 0;
}