一道明显的DP题。
只需把一个数组看成一个环就行了。
推亿推公式,可以得到以下结果:
a [ i ] [ j ] = a [ i − 1 ] [ j − 1 ] + a [ i − 1 ] [ j + 1 ] ; a[i][j]=a[i-1][j-1]+a[i-1][j+1]; a[i][j]=a[i−1][j−1]+a[i−1][j+1];
(这太明显了)
就是前一个项的值加上后一个项的值
不过要特判当数组为1或n时。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,m,a[51][51];
int main(){
scanf("%d%d",&n,&m);
a[0][1]=1;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(j==1)
a[i][j]=a[i-1][2]+a[i-1][n];
else if(j==n)
a[i][j]=a[i-1][1]+a[i-1][n-1];
else
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
printf("%d",a[m][1]);
return 0;
}