题意分析
状态设计:
dp[i][j]
d
p
[
i
]
[
j
]
表示传递i次传到j位置的方案总数
状态转移:
dp[i][j−1]+=dp[i][j]
d
p
[
i
]
[
j
−
1
]
+
=
d
p
[
i
]
[
j
]
dp[i][j+1]+=dp[i][j]
d
p
[
i
]
[
j
+
1
]
+
=
d
p
[
i
]
[
j
]
初始状态
dp[0][1]=1
d
p
[
0
]
[
1
]
=
1
代码总览
#include<bits/stdc++.h>
using namespace std;
const int nmax = 50;
int dp[nmax][nmax];
int n,m;
int get(int x){
if(x<1) return x+n;
if(x>n) return x-n;
else return x;
}
int main(){
while(scanf("%d %d",&n,&m)!=EOF){
memset(dp,0,sizeof dp);
dp[0][1] = 1;
for(int i = 0;i<=m;++i){
for(int j = 1;j<=n;++j){
dp[i+1][get(j+1)] += dp[i][j];
dp[i+1][get(j-1)] += dp[i][j];
}
}
printf("%d\n",dp[m][1]);
}
return 0;
}