题目:                    农民约翰有三个容量分别是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. Shell 脚本实现随机抽取班级学生

    #/bin/bash function rand(){ min=$ max=$(($-$min+)) num=$(date +%s%N) echo $(($num%$max+$min)) } rnd= ...

  2. [转]Unicode utf8等编码类型的原理

    FROM:http://www.cnblogs.com/daxiong2014/p/4768681.html 1.ASCII码          我们知道,在计算机内部,所有的信息最终都表示为一个二进 ...

  3. gloolooer

    V1.2gloolooer金[http://sh.yun.ftn.qq.com/ftn_handler/0a9043ee7aa120d3c864281211dff2f08efe5e2d42438ec5 ...

  4. Java中的URL类

    Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们 ...

  5. CSS--实现小三角形

    <style> html, body { margin: 0; padding: 0; } /*下面用CSS3分别实现向上.下.左.右的三角形*/ .btn-color{ color: # ...

  6. php gzcompress() 和gzuncompress()函数实现字符串压缩

    当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的. PHP提供了 gzcompress() 和gzuncompress() 函数: $string = “Lorem ipsum do ...

  7. Android Studio 引用 gson-2.6.2-sources

    1.拷贝到libs下

  8. Express URL跳转(重定向)的实现

    Express URL跳转(重定向)的实现   Express是一个基于Node.js实现的Web框架,其响应HTTP请求的response对象中有两个用于URL跳转方法res.location()和 ...

  9. Python3的tkinter写一个简单的小程序

    一.这个学期开始学习python,但是看了python2和python3,最后还是选择了python3 本着熟悉python的原因,并且也想做一些小程序来增加自己对python的熟练度.所以写了一个简 ...

  10. PDA手持终端扫描条码开单打印一体 结合后台电脑系统 数据同步交互解决方案

    PDA通过扫描商品条码移动开单,实现便携式办公,伴随式销售,PDA能通过WIFI无线局域网.GPRS互联网直接与主机连接,让公司业务人员能随时随地了解公司产品信息,直接扫描商品条码,进行开单.入库.库 ...