1.4.4 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
题意:
起初 A B 桶是空的,C 桶是满的,C桶的牛奶可以倒到 A B桶中,停止的条件是 A B 变满或者 C桶变空
解释一下样例:
1、C桶中的牛奶倒进A 桶中,A 满停止运行,此时 C桶剩余 2
2、C桶中的牛奶倒进B 桶中,B 满停止运行,此时 C桶剩余 1
3、C桶中的牛奶倒进A桶中 8,B桶中 2,把A桶中的牛奶倒进 C中,A空,C桶剩余 8
4、C桶中的牛奶倒进B桶中 9,A桶中 1,把B桶中的牛奶倒进 C中,B空,C桶剩余 9
5、C桶中的牛奶倒进A桶中 8,B桶中 2,把A桶中的牛奶倒进 C中,B同种的牛奶倒进C中,AB空,C桶剩余 10
思路:
DFS 搜索所有的情况
首先列出所有的情况: C->A, C->B,A->B,A->C,B->A,B->C
每一种情况又分为两种情况,倒的桶是否能够使 被倒桶 倒满
例如 C->A
(1) C能使 A满,A的现有容量是 a(A桶的体积),B桶现有容量不变,C桶减去原来A桶缺少的
(2)C不能使A满,A的现有容量为原来的容量+C现有的容量,B桶容量不变,C桶容量变为 0
C->B 的时候,不用去判断 A此时满不满,因为12 种DFS,总有一种情况能够去判断A满不满的情况
DFS确定结束条件:
如果当前容量已经搜索过了,就结束当前搜索
用三维 vis 数组记录是否已经搜索过
CODE
--------------------- 本文来自 米诺minoz 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/jkdd123456/article/details/82905202?utm_source=copy
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
typedef long long LL;
using namespace std;
int a,b,c;
int ans[30];
int vis[30][30][30];
int flag=0;
void DFS(int x,int y,int z)
{if(vis[x][y][z]==1)return ;elsevis[x][y][z]=1;if(x==0)ans[flag++]=z;if(z-a+x>=0)DFS(a,y,z-a+x);//将c给aelseDFS(x+z,y,0);if(x-c+z>=0)DFS(x-c+z,y,c);//将a给celseDFS(0,y,z+x);if(z-b+y>=0)DFS(x,b,z-b+y);//将c给belseDFS(x,y+z,0);if(y-c+z>=0)DFS(x,y-c+z,c);//将b给celseDFS(x,0,z+y);if(x-b+y>=0)DFS(x-b+y,b,z);//将a给belseDFS(0,y+x,z);if(y-a+x>=0)DFS(a,y-a+x,z);//将b给aelseDFS(x+y,0,z);}
int main()
{int i;cin>>a>>b>>c;DFS(0,0,c);sort(ans,ans+flag);for(i=0; i<=flag-2; i++){cout<<ans[i]<<" ";}cout<<ans[flag-1]<<endl;return 0;
}
1.4.4 Mother's Mil 母亲的牛奶(DFS)相关推荐
- USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)
[USACO1.4.4]Mother's Milk 母亲的牛奶 Time Limit:10000MS Memory Limit:65536K Total Submit:42 Accepted:27 ...
- 【USACO TRAINING】母亲的牛奶(洛谷1215题)
母亲的牛奶 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A.B.C分别是三个从1到20的整数. 最初,A和B桶都是空的,而C桶是装满牛奶的. 有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶 ...
- 母亲的牛奶 Mother's Milk
题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...
- [USACO1.4]母亲的牛奶 Mother's Milk
https://www.luogu.org/problemnew/show/P1215 题解:模拟+BFS /* *@Author: STZG *@Language: C++ */ #include ...
- P1215 母亲的牛奶
https://www.luogu.org/problem/show?pid=1215#sub 暴力模拟多种情况.我是用搜索写的,注意返回条件和约束条件. #include<iostream&g ...
- 1355. 母亲的牛奶【一般 / DFS爆搜】
https://www.acwing.com/problem/content/1357/ #include<bits/stdc++.h> using namespace std; int ...
- 母亲的牛奶(dfs)
[题目描述] 农夫约翰有 3 个容量分别为 a,b,c 升的桶. 最初 a,b 桶都是空的,而 c 桶是装满牛奶的.有时,农夫把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.并且每次倒牛奶,牛 ...
- 母亲的牛奶(BFS,DFS)
农夫约翰有三个容量分别为 A,B,C升的挤奶桶. 最开始桶 A 和桶 B 都是空的,而桶 C 里装满了牛奶. 有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止. ...
- before和after怎么区分_如何区分before和after~有时候觉得两者可以通用
问题描述: 如何区分before和after~有时候觉得两者可以通用 我找到一些相对以上更容易看得出 before:1.主句动作发生之前,从句动作发生在后 Turn off the light bef ...
- java静态内部类了解一下
1. java内部类 什么是内部类?将一个类的定义放在另一个类的内部,就是内部类.Java的内部类主要分为成员内部类.局部内部类.匿名内部类.静态内部类. public class 外部类的名称{// ...
最新文章
- 测试多个输入条件的方法
- (01)System Verilog 程序数据采集
- WINDOWS SERVER 2008 R2 GHO 纯净版
- 已有打开的与此命令相关联的 DataReader,必须首先将它关闭
- “automation服务器不能创建对象”的问题的解决方案大全
- 深入剖析RGB、CMYK、HSB、LAB
- 2007软件英雄会暨CSDN社区英雄榜颁奖典礼邀请人员名单
- STM32F407ZGT6之硬件介绍
- 1号店详情页(共5页)
- Oracle Temp临时表空间及其故障处理
- IE浏览器打不开jupyter notebook网页的解决办法
- 矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)
- oracle-表创建
- android 9 所有应用的行为变更 和 以API28为目标的应用行为变更
- 《高手:精英的见识和我们的时代》思维导图
- 论文写作中常用工具和格式排版
- 22届硕士,去年秋招拿了字节跳动offer,有一说一,不是很难进
- 压力大,觉得身心俱疲,年轻人该怎么应对?
- 访问学者英语口语顺利通关秘诀
- 2016最新申请搜狐自媒体的6点官方建议!