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< ...
随机推荐
- python的requests模块爬取网页内容
注意:处理需要用户名密码认证的网站,需要auth字段. # -*- coding:utf-8 -*- import requests headers = { "User-Agent" ...
- 在linux系统中用docker搭建ss
首先呢,你的先有一台自己的服务器把,这个就不多赘述了,我自己买了一台国外的VPS. 一.docker的安装 首先我们来看下服务器的版本信息: cat /etc/redhat-release //Cen ...
- python django web 端文件上传
利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现. 第一步:在模板文件中,创建一个f ...
- Redis之Redis持久化
Redis(Remote Dictionary Server)是一个可持久化的内存.Key-Value数据库. 作为内存数据库,为了防止因服务器断电或系统宕机而引起的数据丢失问题,Redis自带了持久 ...
- Home Assistant系列 -- 基于树莓派安装并设置自启动
Home Assistant 是当前智能家居最火热的开源DIY 软件,之前的文章 智能家居系统 Home Assistant 系列 --介绍篇 已经详细介绍过了,这里就不详细介绍了,今天介绍 如何 ...
- 大二作业——操作系统实验——C语言用双向链表,模拟实现动态分区式存储管理
实验:动态分区式存储管理 实验内容: 编写程序模拟完成动态分区存储管理方式的内存分配和回收.实验具体包括:首先确定内存空闲分配表:然后采用最佳适应算法完成内存空间的分配和回收:最后编写主函数对所做工作 ...
- 关于web服务安全的一些思考
一.问题: 在开发web项目是时,安全问题有以下几种问题: (1)用户可以自己伪造一个URL请求来进行访问吗? (2)用户不在服务器登录,可以自己封装出用户名.密码进行访问吗? (3)url的参数可以 ...
- slqite3练习
连接 import sqlite3 con = sqlite3.connect(":memory:") c = con.cursor() # Create table c.exec ...
- springboot-vue-JWT使用
springboot-vue-JWT使用 后端引入依赖: <dependency> <groupId>io.jsonwebtoken</groupId> <a ...
- 理解依赖注入(Dependency Injection)
理解依赖注入 Yii2.0 使用了依赖注入的思想.正是使用这种模式,使得Yii2异常灵活和强大.千万不要以为这是很玄乎的东西,看完下面的两个例子就懂了. class SessionStorage { ...