题解
2024-07-28 10:29:03
发布于:广东
6阅读
0回复
0点赞
有注释
#include<bits/stdc++.h>
using namespace std;
int dp[39][39];//dp[i][j]表示第i轮传到j同学的方案数
int n,m;//n个同学,m轮游戏
int main(){
cin >> n >> m;
dp[0][1]=1;//从1开始传球,这里不能算是第一轮,所以i为0
for(int i=1;i<=m;i++){//经过i轮
for(int j=1;j<=n;j++){//此时球在j同学手上
int l=j-1,r=j+1;//l是j同学左边的同学,r是j同学右边的同学
if(l==0) l=n;//1同学的左边是n同学
if(r>n) r=1;//n同学的右边是1同学
dp[i][j]=dp[i-1][l]+dp[i-1][r];
/*
第i轮j同学被传递到 =>第i-1轮j同学的右边被传递到
=>第i-1轮j同学的左边被传递到
j同学第i轮被传递到的方案数
=l同学第i-1轮被传递到的方案数+r同学第i-1轮被传递到的方案数
*/
}
}
cout << dp[m][1];//输出第m轮传到1同学的方案数
}
这里空空如也
有帮助,赞一个