环形DP
f[i][j]表示已经传了i次,落到编号为j的小朋友的所有传球可能数
状态数量 NM 转移O(1)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 35;
int n,m;
int f[N][N]; //f[i][j]表示已经传了i次,落到编号为j的小朋友的所有传球可能数
int main()
{
cin>>n>>m;
f[0][0]=1; //一次没传,落在小蛮手上为一种
for(int i=1;i<=m;i++)
{
for(int j=0;j<n;j++)
{
f[i][j]=f[i-1][(j-1+n)%n]+f[i-1][(j+1)%n];
}
}
cout<<f[m][0];
}