Description–
解题思路–
设
f
[
i
]
[
j
]
f[i][j]
f[i][j] 为传了
j
j
j 个人后传到了
i
i
i 手上的方案数(从
1
1
1 开始传)
则,显然
f
[
1
]
[
0
]
=
1
f[1][0] = 1
f[1][0]=1
- 球从左边来–> 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] f[i][j]=f[i−1][j−1]+f[i+1][j−1]
代码–
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
int n, m;
ll f[35][35];
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 == 1) f[i][j] = f[i + 1][j - 1] + f[n][j - 1];
else if (i == n) f[i][j] = f[1][j - 1] + f[i - 1][j - 1];
else f[i][j] = f[i + 1][j - 1] + f[i - 1][j - 1];
}
printf("%lld", f[1][m]);
return 0;
}