milk

一.题目描述:

gzp有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的。有时,农民把牛奶从一个桶倒到 另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约, 牛奶不会有丢失

写一个程序去帮助gzp找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

二.格式:

INPUT FORMAT:

单独的一行包括三个整数A,B和C。

OUTPUT FORMAT:

只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性

三.样例:

输入:8  9  10

输出:1  2  8  9  10

输入 2  5  10

输出 5  6  7  8  9  10

时间限制:10000 ms

空间限制:128 M

分析:

用DFS(深度优先搜索)

因为牛奶的总量是不变的,所以可以用a,b中的牛奶量做状态,初始状态是(0,0),每次只能有6种选择,a倒b,a倒c,b倒a,b倒c,c倒a,c倒b。

ps:代码里面有注释。。。我依旧懒懒的  -*>0<*          ╮(╯▽╰)╭

&最近睡眠时间严重不足T T

代码:

 #include <iostream>
#include<cstring>
using namespace std;
int a,b,c,tf[][];
void dfs(int i, int k) { //dfs深度优先搜索
if (tf[i][k])return; //判重作用
tf[i][k] = ; //标记搜索
dfs(,k); //如果C的剩余容量大于等于A的牛奶量,则把A倒空,A为0,B为k A->C
dfs(i,); //如果C的剩余容量大于等于B的牛奶量,则把B倒空,A为i,B为0 B->C
if (i>=b-k)dfs(i-b+k,b); //A的牛奶量大于等于B的剩余容量,将 B填满,则 A牛奶量为i-(b-k) A->B
else dfs(,i+k); //A的牛奶量小于B剩余容量,把A倒空,则B中有i+k斤牛奶 A->B
if (k>=a-i)dfs(a,k-a+i); //如果B的牛奶量大于等于A的剩余容量,那么把A填满,A中有a斤,B中有k-(a-i) B->A
else dfs(i+k,); //如果B中的牛奶量小于A的剩余容量,把B倒空,A中有i+k斤牛奶 B->A
int j=c-i-k; //令j为C的牛奶量
if (j>=a-i)dfs(a,k); //如果C的牛奶量大于等于A的剩余容量,把A填满,则A中有a斤,C中有j-(a-i),B中有k C->A
else dfs(i+j,k); //如果C的牛奶量小于A的剩余容量,把C倒空,则 A为i+j,C为0,B为k C->A
if (j>=b-k)dfs(i,b); //如果C的牛奶量大于等于B的剩余容量,把B填满,则A为i,B为b,C为j-(b-k) C->B
else dfs(i,k+j); //如果C的牛奶量小于B剩余容量,把C倒空,则A为i,B为k+j,C为0 C->B
}
int main() {
scanf("%d%d%d",&a,&b,&c);
memset(tf,,sizeof(tf)); //初始化tf数组,所有情况为false
dfs(, ); //不向A,B倾倒牛奶的情况
for (int i=b,bol=;i>=;i--) //B的牛奶量上限为b
if (tf[][i]){ //如果这种[0][i]情况可以存在,则tf[0][i]==1(true)
if(bol)cout<<' '; //定义的类似bool值标记作用的bol变量,控制当是第一个数据的时候不输出空格
else bol=; //不是第一个数据的时候会输出空格
cout<<c-i; //输出C的可能的牛奶量。
}
cout << endl;
}

ACM集训的Day3 B。。。盲目搜索之DFS。。。的更多相关文章

  1. 8.6 正睿暑期集训营 Day3

    目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...

  2. yzm10的ACM集训小感

    7月30号,ACM集训进行了两周,一切都已on the right way.这时的我适时地从题海中探出头,其实除了刷题,也该写点什么来总结下过去.首先,在第一周里,我学习了数据结构,知道了STL这么一 ...

  3. 【寒假集训系列DAY3】

    DAY2的坑之后会补上 DAY3 今天暴力分拿的还是不错的...60+30+25=115,但还是太弱了呀,每题都只会暴力(话说第3题直接输-1给了15分,本以为只会给5分,然后打了半个小时的爆搜... ...

  4. HDU ACM 1078 FatMouse and Cheese 记忆化+DFS

    题意:FatMouse在一个N*N方格上找吃的,每一个点(x,y)有一些吃的,FatMouse从(0,0)的出发去找吃的.每次最多走k步,他走过的位置能够吃掉吃的.保证吃的数量在0-100.规定他仅仅 ...

  5. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)

    Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will ...

  6. ACM学习之路___HDU 5723(kruskal + dfs)

    Abandoned country Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...

  7. 牛客国庆集训派对Day3 B Tree

    Tree 思路: 树形dp 注意0不存在逆元,任何一个数乘以0就变成0了,就没有价值浪,所以要暴力转移 代码: #pragma GCC optimize(2) #pragma GCC optimize ...

  8. 牛客网国庆集训派对Day3题目 2018年

    链接:https://www.nowcoder.com/acm/contest/203/D来源:牛客网 Shopping 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  9. 牛客国庆集训派对Day3 Solution

    A    Knight 留坑. B    Tree 思路:两次树形DP,但是要考虑0没有逆元 可以用前缀后缀做 #include <bits/stdc++.h> using namespa ...

随机推荐

  1. spring mvc 请求转发和重定向(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  2. Jprofile监控本地tomact

    第一步:安装Jprofile后,点击jprofiler.exe 第二步:配置要监控的tomact 1.点击startcenter 2.弹出对话框,点击new session下面的new server ...

  3. XCode 中的代码块导出与导入

    目标文件放置位置 ~/Library/Developer/Xcode/UserData/CodeSnippets CodeSnippets 这整个文件夹都是 直接搬移整个文件夹 操作方法: 解压缩并复 ...

  4. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  5. 注解:【基于主键的】Hibernate1->1关联

    参考:http://blog.sina.com.cn/s/blog_674b23220100hjb5.html Husband.java package org.crazyit.app.domain; ...

  6. SimpleDateFomat里面的parse方法的使用

    parse方法用于将字符串类型的日期/时间解析为Date类型.语法 public Date parse(参数) 要加上这句 throws ParseException或者:try{}catch(){} ...

  7. shell example01

    条件判断 if [[ -e ${1} ]]; then echo "$(tput setaf 2) found ${1} $(tput sgr0)" cat ${1} else e ...

  8. SQLite 创建自增长标识列

    SQLite Autoincrement(自动递增) SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增.我们可以在创建表时在特定的列名称上使用 AUTOINCREM ...

  9. js添加var和不加var区别

    var 声明的变量,作用域是当前 function 没有声明的变量,直接赋值的话, 会自动创建变量 但作用域是全局的. //----------------- function doSth() { a ...

  10. Block 使用注意点

    Block 使用的注意点 block 一般用来传值的时候才调用 代理:一般用来封装控件的时候调用,这样有利于扩展 1.用Block 可以做通知的,什么时候需要的时候就什么时候调用.分为无返回值和有返回 ...