题目:                    农民约翰有三个容量分别是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. Yii 1开发日记 -- Ajax实现点击加载下一页

    功能实现:先输出一页的内容,然后点击加载下一页,如图 1.控制器中 /** * 消费记录:列出用户购买章节的记录 */ public function actionMyPayHis() { //点击加 ...

  2. [Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

    控制台输出的时候显示一串这样的信息:[Project Name] was compiled with optimization - stepping may behave oddly; variabl ...

  3. WPF之Binding初探

    初学wpf,经常被Binding搞晕,以下记录写Binding的基础. 首先,盗用张图.这图形象的说明了Binding的机理. 对于Binding,意思是数据绑定,基本用法是: 1.在xmal中使用 ...

  4. 三层架构的OPP实现的演示例子

    例子:演示会员添加与删除 说明:因为是简单的例子,我们用在屏幕上打印"添加成功"和"删除成功"这几个字表示会员的添加与删除,仅仅为了演示如何实现三层的分离: 1 ...

  5. tp框架之函数调用

    1.如果要在一个方法里面调用另一个方法,可以先用A方法实例化控制器 $m = A("控制器名"); ,然后根据方法名调用 $m->方法名(可传参数); 2.自定义函数库  ( ...

  6. php抽奖代码

    1.经典概率算法抽奖 $tmpItems = ['电脑'=>10, '相机'=>50, '100元现金'=>500]; $proSum = array_sum($tmpItems); ...

  7. PHP扩展安装mcrypt 提示没有可用包(No package php-mcrypt available)

    一.用CentOS的朋友基本在安装软件的时候默认都会想到用yum安装省事省时而且不会有错不需要担心依赖问题. php大部分的扩展都是可以再yum源里安装的,但是部分扩展是没有的,需要安装epel-re ...

  8. scikit-learn算法选择图

    图片来自sklearn官网 最近事情弄完一部分了,继续开始python data science!

  9. Ueditor之前后端源码的学习和简单的研究

    这是我的项目目录 这里写图片描述 1.从访问路径http://localhost:8081/Test/_examples/simpleDemo.html,我们主要是要看看,富文本框被加载出来之前,会调 ...

  10. winform快速开发平台 -> 基础组件之分页控件

    一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...