设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; }