把第一行的233数列全部左移一位就可以推出一个递推矩阵来
比如输入的是
n m
a1 a2 a3 a4 、... 、an
可以构造成
B[0][0]=3
B[1][0]=233
B[2][0]=a1
B[3][0]=a2
B[4][0]=a3
...
B[n+1][0]=an
递推矩阵A:
1 0 0 0 0 ... 0 0
1 10 0 0 0 ... 0 0
0 1 1 0 0 ... 0 0
0 1 1 1 0 ... 0 0
0 1 1 1 1 ... 0 0
...
0 1 1 1 1 ... 1 0
0 1 1 1 1 ... 1 1
然后就是矩阵(A^m)*B第n项就是答案
#include
#include
#include
#include
#define LL long long
using namespace std;
const LL mod = 10000007;
const int maxn=15;
struct node
{
LL mat[maxn][maxn];
int r,c;
}A,B,C,D;
int n,m,a[15];
void initial()
{
A.c=A.r=D.r=D.c=n+2;
B.r=n+2,B.c=1;
for(int i=0;i>= 1;
}
return ret;
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
initial();
C=pow_mod(A,m);
node ans=mul(C,B);
printf("%I64d\n",ans.mat[n+1][0]);
}
return 0;
}