说实话这题写过博客了,但之前写得太丑了ww
题目
解
3<=n<=30,1<=m<=30.
球只能左右传。
所以对于第i个时间段,第j个人要么从他左边获得球,要么从他右边获得球。
所以 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]
代码
#include<cstdio>
int n,m,f[40][40];
int main(){
scanf("%d%d", &n, &m);
f[0][1] = 1; //球在小蛮手上。
for(int i = 1; i <= m; ++i){
f[i][1] = f[i-1][2] + f[i-1][n]; //特别处理了一下边界,毕竟它是个环
f[i][n] = f[i-1][n-1] + f[i-1][1];
for(int j = 2; j < n; ++j)
f[i][j] = f[i-1][j-1] + f[i-1][j+1];
}
printf("%d", f[m][1]); //第m个时间段,球到小蛮手上的方案数
}