设f[i][k]表示经过k次传到编号为i的人手中的方案数,传到i号同 学的球只能来自于i的左边一个同学和右边一个同学,这两个同学的编号分别是i-1和i+1,所以可以得到以下的递推公式:
f[i][k]=f[i-1][k-1]+f[i+1][k-1],(i=1或n时,需单独处理)。
边界条件:f[1][0]=1(特别注意);结果在f[1][m]中。
#include<iostream>
using namespace std;
int i,j,k,n,m,f[31][31];
int main()
{
cin>>n>>m;
memset(f,0,sizeof(f));
f[1][0]=1;
for(k=1;k<=m;k++)
{ f[1][k]=f[2][k-1]+f[n][k-1];
for(i=2;i<=n-1;i++)f[i][k]=f[i-1][k-1]+f[i+1][k-1];
f[n][k]=f[n-1][k-1]+f[1][k-1];
}
cout<<f[1][m]<<endl;
return 0; }