题目:                    农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,
最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。 
写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

递归的题除了书上有代码的几乎没打....(虽然那代码还一堆Bug...)

 这道题点开了快十回就是没思路。主要是想边界条件和倒得策略。

其实觉得和拍卖的题差不多,主要思路是DFS搜索。打了好久然后bug了,内心有点崩

 void dfs(int x,int y,int z)
{
if(x==) ans[z]=;
if((fa[x]==)&&(fb[y]==)&&(fc[z]==)) return;
fa[x]=;fb[y]=;fc[z]=;
//x is 0 ,milk
int tx,ty,tz;
if(y!=)//y not empty
{
tx=x;ty=y;tz=z;
tx+=ty;ty=;// y>>x
if(tx>a) {ty+=tx-a;tx=a;}
dfs(tx,ty,tz); tx=x;ty=y;tz=z;// y>>z
tz+=ty;ty=;
if(tz>c) {ty+=tz-c;tz=c;}
dfs(tx,ty,tz);
} if(z!=)//z not empty
{
tx=x;ty=y;tz=z;//z>>x
tx+=tz;tz=;
if(tx>a){tz+=tx-a;tx=a;}
dfs(tx,ty,tz); tx=x;ty=y;tz=z;//z>>y
ty+=tz;tz=;
if(ty>b){tz+=ty-b;ty=b;}
dfs(tx,ty,tz);
} if(x!=)
{
tx=x;ty=y;tz=z;
ty+=tx;tx=;
if(ty>b){tx+=ty-b;ty=b;}
dfs(tx,ty,tz); tx=x;ty=y;tz=z;
tz+=tx;tx=;
if(tz>c){tx+=tz-c;tz=c;}
dfs(tx,ty,tz);
}
}

这是主要策略代码。无非是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

递归一题总结(OJ P1117倒牛奶)的更多相关文章

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

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

  2. 肝题与oj

    oier很多,oj也很多,这些oj分别有怎样的特点,我们又该怎样选择呢?请各位客官听在下分解 (我主要说一些比较大众的oj) (注意:难度与界面友好度为个人意见,不喜勿喷) 1.入门级 1.NOIop ...

  3. 洛谷P1427 小鱼的数字游戏 题解 递归入门题

    题目链接:https://www.luogu.com.cn/problem/P1427 题目大意: 给你一串数(输入到0为止),倒序输出这些数. 解题思路: 首先这道题目可以用数组存数据,然后输出. ...

  4. 十五 链表与递归,leetCode203题

    两种方式: package com.lt.datastructure.LinkedList; /** * leetCode 203题 * /** * Definition for singly-lin ...

  5. 一道Postgresql递归树题

    转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13698249.html 也是偶然的一次,群友出了一道题考考大家,当时正值疫情最最严重的三月(借口...),披 ...

  6. 概率好题 Light OJ 1027

    题目大意:你在迷宫里,有n扇门,每个门有一个val,这个val可正可负,每次通过一扇门需要abs(x)分钟,如果这个门的val是正的,那么就直接出了迷宫,否则回到原地,问出去迷宫的期望是多少? 思路: ...

  7. HDU 2563 统计问题(递归,思维题)

    统计问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  9. 递归 & 分治算法深度理解

    首先简单阐述一下递归,分治算法,动态规划,贪心算法这几个东西的区别和联系,心里有个印象就好. 递归是一种编程技巧,一种解决问题的思维方式:分治算法和动态规划很大程度上是递归思想基础上的(虽然实现动态规 ...

随机推荐

  1. Quartz定时任务简单实例

    文章纲要: 初步搭建一个由Quartz为引擎集群的定时任务模块,功能为每隔30秒打印一条信息(Hello World!!!) 一.环境 Spring MVC Mevan Quartz 2.2.1 二. ...

  2. UILabel 的一个蛋疼问题

    一.问题描述 在iOS8以下版本,numberOfLines设置为0,编译警告Automatic Preferred Max Layout Width before iOS8.0,同时不能换行. 二. ...

  3. js数组的sort排序详解

    <body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox" ...

  4. Delphi在创建和使用DLL的时候如果使用到string,请引入ShareMem单元

    当使用了长字符串类型的参数.变量时,如string,要引用ShareMem. 虽然Delphi中的string功能很强大,但若是您编写的Dll文件要供其它编程语言调用时,最好使用PChar类型.如果您 ...

  5. "Fatal error: Call to undefined function: file_put_contents()"

    打开页面时提示这个错误: Fatal error: Call to undefined function: file_put_contents() 意思是请求未定义的函数,出现这个提示通常有两种情况: ...

  6. configuration error-could not load file or assembly crystaldecisions.reportappserver.clientdoc

    IIS启动网站后报错: configuration error Could not load file or assembly 'crystaldecisions.reportappserver.cl ...

  7. Tor网络突破IP封锁,爬虫好搭档【入门手册】

    本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗 ...

  8. 谈谈iOS中的屏幕方向

    众所周知,iOS中提供了[UIDevice currentDevice].orientation与[UIApplication sharedApplication].statusBarOrientat ...

  9. JS去重的几种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. SQL参数化查询自动生成SqlParameter列表

    string sql = @"INSERT INTO stu VALUES (@id,@name) "; 参数化查询是经常用到的,它可以有效防止SQL注入.但是需要手动去匹配参数@ ...