递归一题总结(OJ P1117倒牛奶)
题目: 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,
最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。
写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。
递归的题除了书上有代码的几乎没打....(虽然那代码还一堆Bug...)
这道题点开了快十回就是没思路。主要是想边界条件和倒得策略。
其实觉得和拍卖的题差不多,主要思路是DFS搜索。打了好久然后bug了,内心有点崩
1 void dfs(int x,int y,int z) 2 { 3 if(x==0) ans[z]=1; 4 if((fa[x]==1)&&(fb[y]==1)&&(fc[z]==1)) return; 5 fa[x]=1;fb[y]=1;fc[z]=1; 6 //x is 0 ,milk 7 int tx,ty,tz; 8 if(y!=0)//y not empty 9 { 10 tx=x;ty=y;tz=z; 11 tx+=ty;ty=0;// y>>x 12 if(tx>a) {ty+=tx-a;tx=a;} 13 dfs(tx,ty,tz); 14 15 tx=x;ty=y;tz=z;// y>>z 16 tz+=ty;ty=0; 17 if(tz>c) {ty+=tz-c;tz=c;} 18 dfs(tx,ty,tz); 19 } 20 21 if(z!=0)//z not empty 22 { 23 tx=x;ty=y;tz=z;//z>>x 24 tx+=tz;tz=0; 25 if(tx>a){tz+=tx-a;tx=a;} 26 dfs(tx,ty,tz); 27 28 tx=x;ty=y;tz=z;//z>>y 29 ty+=tz;tz=0; 30 if(ty>b){tz+=ty-b;ty=b;} 31 dfs(tx,ty,tz); 32 } 33 34 35 if(x!=0) 36 { 37 tx=x;ty=y;tz=z; 38 ty+=tx;tx=0; 39 if(ty>b){tx+=ty-b;ty=b;} 40 dfs(tx,ty,tz); 41 42 tx=x;ty=y;tz=z; 43 tz+=tx;tx=0; 44 if(tz>c){tx+=tz-c;tz=c;} 45 dfs(tx,ty,tz); 46 } 47 }
这是主要策略代码。无非是6个递归,从a倒b,a倒c,b倒a,b倒c……
关于边界条件本来我是开了一个bool判断c的情况,出现过就return。但是c出现过,a和b的情况还有很多种。于是开了三个bool数组模拟出现的情况。
小细节问题:刚开始我把ans赋值数组放在了return后面,那么就会漏情况...因为如果策略唯一还没赋值就要return。
主函数dfs刚开始我写的dfs(a,b,c)....纠结10分钟才发现。细节决定成败..别忘了只有c有牛奶orz
转载于:https://www.cnblogs.com/snifemoree/p/6230955.html
递归一题总结(OJ P1117倒牛奶)相关推荐
- 论如何科学地倒牛奶~
假期的小编,是不存在什么早饭的.每天10点多起床的小编一般都是来杯牛奶当作早(午)饭. 倒牛奶的小编 只不过有一天不知道为何,倒牛奶的时候溅到了桌子上好多,小编以迅雷不及掩耳之势,将桌子清理干净了(防 ...
- [科技部与你共成长] 倒牛奶
农夫John有三个装牛奶的桶,容量分别为A.B.C,数字A.B.C是1到15的整数,开始时A桶.B桶为空,C桶装满牛奶.农夫John装牛奶从一个桶倒向另一个桶,直到该桶为空或另一个桶满为止,一个倒牛奶 ...
- 1.4 milk3 倒牛奶
广度优先搜索,用数组记录到达过的状态 Mother's Milk Farmer John has three milking buckets of capacity A, B, and C liter ...
- hloj#168“倒牛奶”解题讨论
题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数. 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...
- 【长更】一句话题解(组队训练的俄罗斯题、oj、camp)
还是太长了,第二次分裂.. 标 * 的为有价值的题,标 ^ 的为欺诈题,标 - 的为知识点待填坑,标 ? 的表示看别人是这样做的但是没懂为什么 组队训练的题,如果是队友过的板刷题,题面又很 ...
- 函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事
题目:一只小蜜蜂 递归做法: #include<cstdio> #include<iostream> #include<stdlib.h> #include< ...
- 在线判题系统(oj)效果分析图_在线代码编写平台开发分享
计算机专业的大学生应该都了解acm比赛,这种通过使用oj(online judge)系统在线编程刷题,实时反馈学习排名的方式能很大程度激发学生的学习热情. oj学习排名界面 oj个人学习记录界面 只是 ...
- 面试官系统精讲Java源码及大厂真题 - 34 只求问倒:连环相扣系列锁面试题
34 只求问倒:连环相扣系列锁面试题 自信和希望是青年的特权. 引导语 面试中,问锁主要是两方面:锁的日常使用场景 + 锁原理,锁的日常使用场景主要考察对锁 API 的使用熟练度,看看你是否真的使用过 ...
- 2015年2月2日 奶农倒牛奶的背后
郎教授说: 2014年12月份开始起,新疆山东山西河北北京都发现奶农倒奶的问题 中国人均的喝奶量是32.4公斤,只是世界平均的1/3 中国是市场是4000W吨,也就是哈有8000W吨的潜力 2007年 ...
最新文章
- np.eye()的函数能将一个label数组,大小为(1,m)或者(m,1)的数组,转化成one-hot数组
- solidworks activator未响应_SolidWorks之初识工程图
- 多线程, 注入spring 服务
- 使用SAP API portal进行SAP SuccessFactors的API测试
- 前端又一本升级版图书上市了,听说比第一版还好看
- mac下完全卸载程序的方法
- win10 php7+apache2.4的配置以及遇到的问题及解决
- eclipse切换git分支
- pycharm hotkey
- 【python|opencv】cv2.imread返回None,无法正确读取图片
- 4G DTU设备数据上传阿里云微信小程序获取阿里云设备数据
- html跳转浏览器打开新页面打开新窗口,用JS控制打开新窗口
- SQLAlchemy学习-1.环境准备与基础使用
- 华三防火墙配置端口地址转换_华三防火墙双向nat配置 防火墙端口映射
- 一名中专生的坎坷程序人生
- Java 12 / JDK 12 正式发布
- C++报错信息:LNK2001:无法解析的外部符号 原因分析及解决方法
- 王桂林 C++基础与提高 练习题——格式时钟输出(实时的,精确到秒)
- 人头识别与计数_基于人头检测的人数统计算法研究
- 淘宝天猫店铺商品API,店铺商品分类接口代码对接教程
热门文章
- OringPro 调整坐标轴
- Windows 7x64 Ultimate Modified by Michael
- 如何进行Sublime Text插件的升级和卸载?
- 不曾想过 未来的_未来想要什么
- STC12C5A60S2单片机IO口工作模式设定
- 以计件积分为纽带-探索客户中心团队再造模式
- JSON必知必会pdf
- 集成方法,或者叫做组合方法(Ensemble methods)介绍(一)
- matlab中的分数次方,matlab中如何画出幂函数指数为分数时比如y=x^(1/3)的完整图像...
- GO Strings-and-runes