题目:                    农民约翰有三个容量分别是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倒牛奶)相关推荐

  1. 论如何科学地倒牛奶~

    假期的小编,是不存在什么早饭的.每天10点多起床的小编一般都是来杯牛奶当作早(午)饭. 倒牛奶的小编 只不过有一天不知道为何,倒牛奶的时候溅到了桌子上好多,小编以迅雷不及掩耳之势,将桌子清理干净了(防 ...

  2. [科技部与你共成长] 倒牛奶

    农夫John有三个装牛奶的桶,容量分别为A.B.C,数字A.B.C是1到15的整数,开始时A桶.B桶为空,C桶装满牛奶.农夫John装牛奶从一个桶倒向另一个桶,直到该桶为空或另一个桶满为止,一个倒牛奶 ...

  3. 1.4 milk3 倒牛奶

    广度优先搜索,用数组记录到达过的状态 Mother's Milk Farmer John has three milking buckets of capacity A, B, and C liter ...

  4. hloj#168“倒牛奶”解题讨论

    题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数. 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...

  5. 【长更】一句话题解(组队训练的俄罗斯题、oj、camp)

      还是太长了,第二次分裂..   标 * 的为有价值的题,标 ^ 的为欺诈题,标 - 的为知识点待填坑,标 ? 的表示看别人是这样做的但是没懂为什么   组队训练的题,如果是队友过的板刷题,题面又很 ...

  6. 函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事

    题目:一只小蜜蜂 递归做法: #include<cstdio> #include<iostream> #include<stdlib.h> #include< ...

  7. 在线判题系统(oj)效果分析图_在线代码编写平台开发分享

    计算机专业的大学生应该都了解acm比赛,这种通过使用oj(online judge)系统在线编程刷题,实时反馈学习排名的方式能很大程度激发学生的学习热情. oj学习排名界面 oj个人学习记录界面 只是 ...

  8. 面试官系统精讲Java源码及大厂真题 - 34 只求问倒:连环相扣系列锁面试题

    34 只求问倒:连环相扣系列锁面试题 自信和希望是青年的特权. 引导语 面试中,问锁主要是两方面:锁的日常使用场景 + 锁原理,锁的日常使用场景主要考察对锁 API 的使用熟练度,看看你是否真的使用过 ...

  9. 2015年2月2日 奶农倒牛奶的背后

    郎教授说: 2014年12月份开始起,新疆山东山西河北北京都发现奶农倒奶的问题 中国人均的喝奶量是32.4公斤,只是世界平均的1/3 中国是市场是4000W吨,也就是哈有8000W吨的潜力 2007年 ...

最新文章

  1. np.eye()的函数能将一个label数组,大小为(1,m)或者(m,1)的数组,转化成one-hot数组
  2. solidworks activator未响应_SolidWorks之初识工程图
  3. 多线程, 注入spring 服务
  4. 使用SAP API portal进行SAP SuccessFactors的API测试
  5. 前端又一本升级版图书上市了,听说比第一版还好看
  6. mac下完全卸载程序的方法
  7. win10 php7+apache2.4的配置以及遇到的问题及解决
  8. eclipse切换git分支
  9. pycharm hotkey
  10. 【python|opencv】cv2.imread返回None,无法正确读取图片
  11. 4G DTU设备数据上传阿里云微信小程序获取阿里云设备数据
  12. html跳转浏览器打开新页面打开新窗口,用JS控制打开新窗口
  13. SQLAlchemy学习-1.环境准备与基础使用
  14. 华三防火墙配置端口地址转换_华三防火墙双向nat配置 防火墙端口映射
  15. 一名中专生的坎坷程序人生
  16. Java 12 / JDK 12 正式发布
  17. C++报错信息:LNK2001:无法解析的外部符号 原因分析及解决方法
  18. 王桂林 C++基础与提高 练习题——格式时钟输出(实时的,精确到秒)
  19. 人头识别与计数_基于人头检测的人数统计算法研究
  20. 淘宝天猫店铺商品API,店铺商品分类接口代码对接教程

热门文章

  1. OringPro 调整坐标轴
  2. Windows 7x64 Ultimate Modified by Michael
  3. 如何进行Sublime Text插件的升级和卸载?
  4. 不曾想过 未来的_未来想要什么
  5. STC12C5A60S2单片机IO口工作模式设定
  6. 以计件积分为纽带-探索客户中心团队再造模式
  7. JSON必知必会pdf
  8. 集成方法,或者叫做组合方法(Ensemble methods)介绍(一)
  9. matlab中的分数次方,matlab中如何画出幂函数指数为分数时比如y=x^(1/3)的完整图像...
  10. GO Strings-and-runes