解题思路
a[i][j]表示经过j次传递到达第i号人的方案数
每个人都只能传给左右两边的人
所以每个人也只能接到左右相邻的人的传球即a[i-1],a[i+1]
a[i-1][j-1],a[i+1][j-1]分别表示经过j-1次传递到达左右两边人手中的方案数
所以可以得到递推公式a[i][j] = a[i-1][j-1] + a[i+1][j-1]
开始第1号手中,所以经过0次传递到达自己手中。a[1][0] = 1
i/j 0 1 2 3
0 0 0 0 0
1 1 0 2 2
2 0 1 1 3
3 0 1 1 3
AC代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin>>n>>m;
int a[35][25];
memset(a, 0, sizeof(a));
a[1][0] = 1;
for(int j = 1;j <= m;j++) {
a[1][j] = a[2][j - 1] + a[n][j - 1];
for(int i = 2;i <= n - 1;i++)
a[i][j] = a[i - 1][j - 1] + a[i + 1][j - 1];
a[n][j] = a[n - 1][j - 1] + a[1][j - 1];
}
printf("%d\n", a[1][m]);
return 0;
}