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< ...
随机推荐
- SQL分页过多时, 如何优化
问题: 我们经常会使用到分页操作,这里有个问题,在偏移量非常大的时候,它会导致MySQL扫描大量不需要的行然后再抛弃掉.如: , ; 上述这条SQL语句需要查询10020条记录然后只返回最后20条.前 ...
- jar下载地址
java开发难免需要下载额外的jar,推荐一个地址 http://www.java2s.com/Code/Jar/CatalogJar.htm
- js获取dom元素的子元素,父元素,兄弟元素小记
原生jsvar a = document.getElementById("dom"); del_space(a); //清理空格 var b = a.childNodes; //获 ...
- javascript 之 对象
可以通过 Object 构造函数或对象字面量的方式创建对象,但是这些方式的缺点是使用同一个接口创建多个对象,会产生大量重复的代码. 1.工厂模式 function createPerson(name, ...
- 微信小游戏websocket支持https/wss
公司新项目需要支持wss,解决方法如下: https://blog.csdn.net/peter_teng/article/details/82866613 proxy_pass http://web ...
- jdbc之存储过程的调用和调用方法
调用存储过程 调用存储过程的sql语句 {call 过程名称(参数列表)} conn = DbUtils.getConnection(); sql = "{call p_order_appr ...
- IOS 可以连接 蓝牙BLE设备,但是无法发现服务(原创)
注:转载请标明文章来源,感谢支持作者劳动! 一.问题描述 用iphone手机上的nRF connect软件调试蓝牙通信. 1.nRF52蓝牙demo电路板,烧录一个SDK的程序,iphone手机可以成 ...
- Leecode刷题之旅-C语言/python-326 3的幂
/* * @lc app=leetcode.cn id=326 lang=c * * [326] 3的幂 * * https://leetcode-cn.com/problems/power-of-t ...
- uva 210 - Concurrency Simulator (并行程序模拟)
from CSDN: https://blog.csdn.net/su_cicada/article/details/87898579 例题6-1 并行程序模拟( Concurrency Simula ...
- centos系统误删libc.so.6
前段时间遇到开发人员更新glibc版本,把/usr/lib64/libc-2.12.so & libc.so.6 -> libc-2.12.so 这个软连接更改之后导致报错: ls: e ...