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

描述

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

格式

PROGRAM NAME: milk3

INPUT FORMAT:

(file milk3.in)

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

OUTPUT FORMAT:

(file milk3.out)

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

SAMPLE INPUT 1

8 9 10

SAMPLE OUTPUT 1

1 2 8 9 10

SAMPLE INPUT 2

2 5 10

SAMPLE OUTPUT 2

5 6 7 8 9 10

分析

Way :DFS 因为牛奶的总量是不变的,所以可以用a,b中的牛奶量做状态,初始状态是(0,0),每次只能有6种选择,a倒b,a倒c,b倒a,b倒c,c倒a,c倒b。用一个数组vis[i][j]判重,s[i]记录c中所有可能值(s[i]=true表示c中可能出现i),如果当前状态是(0,x),那么s[mc -x]=true,最后输出s中所有true的就可以了。

CODE:

/*
ID: 138_3531
LANG: C++
TASK: milk3
*/#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("milk3.in");
ofstream fout("milk3.out");
int a, b, c, tf[21][21] = {0};void dfs(int i, int k) {if (tf[i][k])return;tf[i][k] = 1;dfs(0, k);dfs(i, 0);if (i >= b - k)dfs(i - b + k, b);else dfs(0, i + k);if (k >= a - i)dfs(a, k - a + i);else dfs(i + k, 0);int j = c - i - k;if (j >= a - i)dfs(a, k);else dfs(i + j, k);if (j >= b - k)dfs(i, b);else dfs(i, k + j);
}int main() {fin >> a >> b >> c;dfs(0, 0);for (int i = 20, ge = 0; i >= 0; i--)if (tf[0][i]) {if (ge)fout << ' ';else ge = 1;fout << c - i;}fout << endl;
}

转载于:https://www.cnblogs.com/AbandonZHANG/archive/2012/07/18/2598415.html

USACO / Mother's Milk (DFS)相关推荐

  1. usaco Mother's Milk

    问题:有三个容器A,B,C,只能从一个容器倒入另一容器,要么全部倒入,要么倒直到另一容器满.问容器A为0时,C可能的值 思路: 1.深度优先搜索 用State来表示int a[3],遍历从一容器到另两 ...

  2. USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)

    [USACO1.4.4]Mother's Milk 母亲的牛奶 Time Limit:10000MS  Memory Limit:65536K Total Submit:42 Accepted:27  ...

  3. usaco shuttle puzzle(dfs剪枝)

    这题一看我也以为找规律,然后无法下手之后又想到bfs最后看题解是用dfs大神dfs用的出神入化. 不过这题好像可以找规律. /* ID:jinbo wu TASK: shuttle LANG:C++ ...

  4. usaco street race(dfs)

    一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...

  5. Riding the Fences USACO 3.3 欧拉路径(dfs+floodfill)

    额,我是直接dfs的思路,但是到case 5过不去了,感觉是太慢了.然后网上看题解,题目原型就是欧拉路径, 欧拉路径存在的条件是 要么点的度都是偶数,要么只有两个点的度是奇数.如果是两个点的度是奇数, ...

  6. 母亲的牛奶 Mother's Milk

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

  7. USACO-Section1.5 Mother's Milk (深度优先搜索)

    2017-8-1 题目描述 给你三个容器,初始时前两个为空,最后一个为满,理想状态下,求当第一个容器 为空时,最后一个容器所剩的所有可能性 解答 (1)只能有牛奶的倒给未满的 (2)避免陷入死循环-& ...

  8. USACO健康的荷斯坦奶牛(DFS,二进制暴力枚举)

    农夫约翰以拥有世界上最健康的奶牛而感到自豪. 奶牛想要保持健康,每天就要补充足量的多种维生素. 约翰为奶牛们准备了多种牛饲料,每种牛饲料中都富含奶牛所需的多种维生素,但是每种维生素的具体含量可能并不相 ...

  9. uscao Mother's Milk

    bfs吧,我做过一题非常可乐跟这题很像.就是每次把牛奶在两个杯子中互倒,找到所有情况把a==0这个情况下的c保存起来(可能不同状态下的c相同用vis标记). /* ID: jinbo wu LANG: ...

  10. [USACO1.4]母亲的牛奶 Mother's Milk

    https://www.luogu.org/problemnew/show/P1215 题解:模拟+BFS /* *@Author: STZG *@Language: C++ */ #include ...

最新文章

  1. MySQL跑在CentOS 6 和 7上的性能比较
  2. python数据分析年薪百万_如何成为一个年薪 50 万以上的数据分析师?
  3. Ado.net类与对象
  4. PostgreSQL处理xml数据初步
  5. SQL Server 2012 Managed Service Account
  6. Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
  7. git提交时报错:Updates were rejected because the tip of your current branch is behind
  8. 剑指offer之求两个数之和(不能使用四则运算)
  9. 4918字,详解商品系统的存储架构设计
  10. java中怎么判断依赖关系,在Maven 2中,我如何知道依赖性来自哪个依赖?
  11. “三峡水怪”的真面目竟是这个!水怪:我不要面子的吗?
  12. linux安装java_安装和配置Linux上的Java运行环境
  13. 赢在AI,人工智能技术体验
  14. Atitit doc mng 文档管理总结目录1. 主要几大内容 12. 存储管理 22.1. 一般来说 ,文档存储在IM网盘note邮箱blog wiki等地 22.2. 文档格式与体
  15. 探索Perl的世界(更新到第十七章57集)
  16. 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
  17. 树为什么能长这么高?
  18. 水溶性羧基化 CdSe/ZnS 量子的特点
  19. java 邮件 客户端_JAVA编写ESMTP客户端发送邮件代码
  20. AJAX JSON

热门文章

  1. 判断目标主机和自己是否是一个子网的方法
  2. 网传快手大幅度裁员30%
  3. 面试官:谈谈 Tomcat 架构及启动过程,我一脸懵逼。。
  4. v2ex热帖:面了几个程序员(3-5年),发现他们对MySQL的distinct关键字有误解......
  5. 网页版 Nginx 配置文件生成器发布,在线一健生成神器!不用愁了!
  6. 二货同事!写上千行的类!这样的代码让我生不如死!
  7. 漫画:80 端口争夺战
  8. tcp下载窗口太小的问题_面试官:换人!他连 TCP 这几个参数都不懂(二)
  9. Linux 理解平均负载
  10. PHP中H5棋牌开发的异常处理