题目描述
解题思路
f ( i , j ) f(i,j) f(i,j)表示传球经过j个人后在第 i i i个同学手上的方案数,很显然同学i的球会由 i − 1 i-1 i−1或 i + 1 i+1 i+1传过来,故可得递推式: f ( i , j ) = f ( i − 1 , j − 1 ) + f ( i + 1 , j − 1 ) f(i,j)=f(i-1,j-1)+f(i+1,j-1) f(i,j)=f(i−1,j−1)+f(i+1,j−1)。
PS:由于本题是一个环,1和n可以连通,要特判这两个地方。
代码
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,f[30][20];
int main(){
scanf("%d%d",&n,&m);
f[1][0]=1;
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(i==n)
f[i][j]=f[1][j-1]+f[n-1][j-1];
else if(i==1)
f[i][j]=f[n][j-1]+f[2][j-1];
else f[i][j]=f[i-1][j-1]+f[i+1][j-1];
}
}
printf("%d",f[1][m]);
}