#include<iostream> using namespace std; int n;// n个人传球游戏 默认开始球在编号为1的位置 int m;// 传递m次球 int main(){cin>>n>>m;// 动态转方程:// 球传递到编号为k人的手中// 种类总数 = 传递到k-1编号种类总数 + 传递到k+1编号种类总数// 考虑界限:当传递次数为0次除了1为一种其他的为0/*0 1 2 3|----------------|0 | 0 | 1 | 0 | 0 |------------------1 | 0 | 0 | 1 | 1 |------------------2 | 0 | 2 | 1 | 1 |------------------3 | 0 | 2 | 3 | 3 |*/int DP[31][31] = {};DP[0][1] = 1;// 传球次数for(int C=1;C<=m;C++){for(int N=1;N<=n;N++){// 学生的编号// 因为构成一个圈当编号为1的时候 == 编号为n以及2的和if(N==1){DP[C][1] = DP[C-1][n] + DP[C-1][2];}else if(N==n){// 编号为n也是个扣环特殊点DP[C][n] = DP[C-1][n-1] + DP[C-1][1]; }else{DP[C][N] = DP[C-1][N-1] + DP[C-1][N+1];}}}cout<<DP[m][1];return 0; }