学过离散数学的都应该知道这题怎么做,然后我用的是矩阵快速幂,复杂度
,就算是遇到 值很大的情况下也可以解。

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;
typedef long long ll;
const int maxn=40;

int n,k;
struct node{
    ll f[maxn][maxn];
    inline node operator*(const node&x)const{
        node y; memset(y.f,0,sizeof(y.f));
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                for(int k=1;k<=n;k++)
                {
                    y.f[i][j]+=f[i][k]*x.f[k][j];
                }
            }
        }
        return y;
    }
}a;

node qpow(node a,int b)
{
    node ans; memset(ans.f,0,sizeof(ans.f));
    for(int i=1;i<=n;i++)ans.f[i][i]=1;
    while(b)
    {
        if(b&1)ans=ans*a;
        b>>=1; a=a*a;
    }
    return ans;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>a.f[i][j];
        }
    }
    node ans=qpow(a,k);
    cout<<ans.f[1][n]<<endl;
    return 0;
}