USACO 1.4.2 Mother's Mil 母亲的牛奶(DFS)
Description
农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。 写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。
Input
单独的一行包括三个整数A,B和C。
Output
只有一行,列出当A桶是空的时候,C桶牛奶所剩量的所有可能性。
Sample Input
8 9 10
Sample Output
1 2 8 9 10 解题思路:真是尴尬啊,当时做完这道题直接就将代码赋值过来了,并没有直接写题解,还是在同学的提醒下。。。。汗颜啊。我当时第一感觉是想分情况来
讨论,但是忘记了我们不知道他倒了几次,所有不能来分情况讨论(可怜了我9个if)。那该怎么办呢?归根到底倒牛奶也就是a->b,a->c,b->a,b->c,c->a,
c->b这六种情况嘛,但我们还要根据题意能不能倒满会不会有剩余,每一种倒法再分成两种情况。
但是每次倒完后的状态不一定一样的,不一样的状态在进行六种不同方式的倾倒,又可以产生不一样的状态。这就需要来记录每个状态是否出现过,当出现过时就直接返回到函数出口,
进行上一层的下一次变换,若没有出现过此状态就继续进行这六种方式的变换。深度优先搜索示意图如下:那么就选择使用DFS枚举这些情况就可以了。
#include<cstring>
#include<cstdio>
#include<algorithm>
#define MAX 21
using namespace std;
int A,B,C;
int vis[MAX][MAX][MAX];///记录状态是否访问过
int r[MAX];
void DFS(int a,int b,int c)
{
if(vis[a][b][c]==)///当这种状态出现过就直接返回函数出口,进行下一层变换
{
return ;
}
else
{
vis[a][b][c]=;
}
if(a==&&!r[c])///记录a为0时,c的值
{
r[c]=;
}
if(c>=A-a)///c->a
{
DFS(A,b,c-A+a);
}
else
{
DFS(a+c,b,);
}
if(c>=B-b)///c->b
{
DFS(a,B,c-B+b);
}
else
{
DFS(a,b+c,);
}
if(b>=A-a)///b->a
{
DFS(A,b-A+a,c);
}
else
{
DFS(a+b,,c);
}
if(b>=C-c)///b->c
{
DFS(a,b-C+c,C);
}
else
{
DFS(a,,c+b);
}
if(a>=B-b)///a->b
{
DFS(a-B+b,B,c);
}
else
{
DFS(,b+a,c);
}
if(a>=C-c)///a-c
{
DFS(a-C+c,b,C);
}
else
{
DFS(,b,c+a);
}
}
int main()
{
int i,counts;
scanf("%d%d%d",&A,&B,&C);
DFS(,,C);
counts=;
for(i=;i<=C;i++)
{
if(r[i])
{
counts++;
if(counts==)
{
printf("%d",i);
}
else
{
printf(" %d",i);
}
}
}
printf("\n");
return ;
}
USACO 1.4.2 Mother's Mil 母亲的牛奶(DFS)的更多相关文章
- Mother's Mil 母亲的牛奶
Description 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装 ...
- 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 217通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 ...
- P1215 [USACO1.4]母亲的牛奶 Mother's Milk
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满 ...
- 随手练——USACO 1.44 母亲的牛奶
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 洛谷 P1215:https://www.luogu.org/problemnew/show/P1215 解题思想:DFS 大一 ...
- 母亲的牛奶(milk)
母亲的牛奶(milk) 题目描述 农民约翰有三个容量分别是A.B.C升的桶,A.B.C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直 ...
- 母亲的牛奶(milk) (BFS)
问题 A: 母亲的牛奶(milk) 时间限制: 1 Sec 内存限制: 64 MB提交: 14 解决: 8[提交][状态][讨论版] 题目描述 农民约翰有三个容量分别是A.B.C升的桶,A.B.C ...
- luogu P1215 [USACO1.4]母亲的牛奶 Mother's Milk
题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...
- 洛谷 P1215 [USACO1.4]母亲的牛奶 Mother's Milk
题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...
- 【USACO 1.4】Mother's Milk
/* TASK: milk3 LANG: C++ SOLVE: 倒水,dfs,枚举每一种倒法,ca[i][j]记录a和c桶的状态,因为总体积不变,故b的状态不需要记录. */ #include< ...
随机推荐
- jQuery|简单tab栏切换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- redis具体使用
key 命名规则:不可包含空格和\n 创建方式: set key value values Strings (Binary-safe strings) Lists Sets Sorted sets ...
- PHP-掌握基本的分布式架构思想
虽然说写PHP目前都是接触的业务代码,发现写久了,也要熟悉相应的架构 在高并发,高可用的系统下,都是使用高性能的分布式架构,最近在学习相关知识 分享一张图片: 欢迎关注公众号[phper的进阶之路], ...
- PHP接收post请求,不是空数组就是没值,怎么办!
使用: $_POST $_REQUEST I('post.') 都不行, 换成: file_get_contents("php://input");
- Tomcat优化(心得经验)
最近用httpclient做performance testing时,发现当线程加到150时服务端就会抛出socket资源用尽的错误,根本没法再往上加,响应的速度也是相当的慢,后来经过研究,发现在se ...
- 与“零值”作比较的 if 语句。
笔试时候遇到的问题,在此做一下记录. 1.if语句中的布尔变量与零值作比较 不能用布尔变量与true,false,1,0直接作比较.布尔变量类型的语义是:零值为“假”,任何非零值都表示“真”.因为tr ...
- IOTutility 一个轻量级的 IOT 基础操作库
IOTutility 一个轻量级的 IOT 基础操作库 Base utility for IOT devices, networking, controls etc... IOTutility 的目的 ...
- Hadoop学习(二) Hadoop配置文件参数详解
Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2.6.4. etc/hadoop/core-site.xm ...
- 20155329实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 1实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 2. 初步掌握单元测试 ...
- 20155334 2016-2017-2 《Java程序设计》第一周学习总结
20155334 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一章主要讲了Java的前世今生以及Java的三大平台(Java SE.Java EE.Ja ...