注意一点:既然是一个自然数,那么最高位肯定不是0!初始化的时候从1到k-1
上代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int k,n,dp[110][110];//[有几位][末尾是几] 2位4进制 int MOD = 1000000007; int main(){ scanf("%d%d",&k,&n); for(int i = 1;i < k;i++){ dp[1][i] = 1; } for(int i = 2;i <= n;i++){ for(int j = 0;j < k;j++){ for(int q = 0;q < k;q++){ if(abs(q-j) != 1) dp[i][j] = (dp[i][j] + dp[i-1][q])%MOD; } } } int sum = 0; for(int i = 0;i < k;i++){ sum =(sum + dp[n][i])%MOD; } printf("%d\n",sum); return 0; }