😀😀😀
2026-07-27 13:54:09
发布于:江西
0阅读
0回复
0点赞
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m; // 输入人数n和传球次数m
// 定义DP数组,f[i][j]表示传i次后球在j号同学手中的方法数
// 初始化数组为0
int f[35][35] = {0};
// 初始状态:传0次球时,球在1号同学手中
f[0][1] = 1;
// 动态规划填表
for (int i = 1; i <= m; i++) { // 遍历传球次数
for (int j = 1; j <= n; j++) { // 遍历每个同学
if (j == 1) {
// 1号同学:只能从n号(左邻)或2号(右邻)传来
f[i][1] = f[i-1][n] + f[i-1][2];
} else if (j == n) {
// n号同学:只能从n-1号(左邻)或1号(右邻)传来
f[i][n] = f[i-1][n-1] + f[i-1][1];
} else {
// 中间同学:从左邻(j-1)或右邻(j+1)传来
f[i][j] = f[i-1][j-1] + f[i-1][j+1];
}
}
}
// 输出传m次后球回到1号同学的方法数
cout << f[m][1] << endl;
return 0;
}
这里空空如也






有帮助,赞一个