传球游戏——递归算法
题目描述:
N个同学围一圈,同学之间可以左右传球,A为第一位同学,有多少种传球方法,在****传M次后回到A同学手中? 输出情况数 输入人数n、传球次数m
例如:N=3 M=3 假设为 1-2-3 个同学围一圈 ,
有两种可能:1->2->3->1 1->3->2->1
像这种有几种情况的题基本都要用到递归,或者递推、动态规划等
1、方法一:递归
分三种情况:
1. 球在第一个人手里 可以传2 或者传n
2. 球在最后一个人手里 可以传1 或者n-1
3. 球在中间的人的手里 传 k-1 或 k+1
int sum=0;
int m=0,n=0;
void dfs(int k,int step)
{if(step==m) //传了m步 递归出口{if(k==1) //如果传了m次球回到第一个人手中 算一次 k代表球在第几个人手中sum++;return;}//一直递归 列出每一种符合情况的个数 即每一种step=m&&k=1的情况if(k==n) //球在第n个人手里 {dfs(1,step+1);dfs(k-1,step+1);} if(k==1) //球在第一个人手里 {dfs(n,step+1);dfs(2,step+1);}if(k>1 && k<n) //在第1-n之间 {dfs(k+1,step+1); //给右边 步数也要+1dfs(k-1,step+1); //给左边} }
main函数
int main()
{cin>>n>>m;//方法一 :递归 dfs(1,0);cout<<sum<<endl;
}
2、方法二:递推
递推 f[i,j]=f[i-1,j-1]+f[i+1,j-1]
球在 i 的位置,传球次数用 j 表示 则i位置的方案数是左右两边
方案的和
int sum=0;
int m=0,n=0;
int f[100][100]={0};int main()
{cin>>n>>m;//方法一 :递归 dfs(1,0);cout<<sum<<endl; //方法二:递推 f[1][0]=1; //从1号开始传球 初始化一号 不管谁从一号得到球都计传球一次 for(int j=1;j<=m;j++){//这里也分三种情况for(int i=2;i<=n-1;i++) //每次刷新f[i][j] = f[i-1][j-1]+f[i+1][j-1];//球在 **i** 的位置,传球次数用 **j** 表示 则i位置的方案数是左右两边方案的和 f[1][j] = f[2][j-1]+f[n][j-1];f[n][j] = f[1][j-1]+f[n-1][j-1]; } cout<<f[1][m]<<endl;}
总结
递归算法和动态规划为算法部分最难理解的,只要某一天顿悟了,就出道了!O(∩_∩)O哈哈~
传球游戏——递归算法相关推荐
- 洛谷P1057 传球游戏(记忆化搜索)
点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...
- 动态规划——洛谷_P1057传球游戏
题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...
- 洛谷 1057——传球游戏(递推与递归二分)
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...
- P1057 传球游戏
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...
- 传球游戏(洛谷-P1057)
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的: n 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每 ...
- Java 算法 传球游戏
目录标题 题目描述 解题思路 代码 流程图 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手 ...
- 蓝桥杯 传球游戏 动态规划
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...
- 个人赛 A 题 传球游戏(ball)
Description 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开 ...
- CodeVs 1148 传球游戏
CodeVs 1148 传球游戏 解题报告 by MPS ------------------ ...
最新文章
- body标签下莫名奇妙多了一行空行,原来是编码的问题
- Ajax4Jsf 简单介绍
- python barrier_Python线程障碍对象Barrier原理详解
- python标准库之zipfile
- 如何使用Movavi Video Editor Plus在Mac上制作旁白配音视频
- Hector代码笔记
- java图的拓扑排序,本周算法:图的拓扑排序,本周算法拓扑排序
- 在matlab下计算信源熵
- 最全的LED电源解决方案 转载
- 一文读懂 HTTPS 与 TLS证书链校验
- linux pclint配置_PC-lint
- html5 div 拱桥形状制作,纯CSS3+DIV实现小三角形边框效果的示例代码
- css变形-扭曲(skew())
- ES6, ES7, ES8, ES9 以及 ES10 新特征
- git push提交成功后如何撤销回退
- 计算机网络按其互连的距离远近,计算机网络按其互连的距离远近,可以分为:()。...
- POJ 1006	生理周期
- CTF新近学习经验和疑难
- mysql数据库表设计理论原则实践
- 【3D 目标检测】PV-RCNN++