【USACO 1.4.4】母亲的牛奶
【题目描述】
【格式】
【分析】
直接上BFS就行了,注意判重。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
const int Max=;
#define hash(t) h[t.a][t.b][t.c]
using namespace std;
struct State{int a,b,c;}data;
bool h[][][],h_2[];//哈希表
int A,B,C,point=,ans[Max];
void bfs();
void check(State t);
int main()
{
//文件操作
freopen("milk3.in","r",stdin);
freopen("milk3.out","w",stdout);
scanf("%d%d%d",&A,&B,&C);
data.a=data.b=;data.c=C;//初始状态
bfs();
sort(ans,ans+point);
for (int i=;i<point;i++) printf("%d ",ans[i]);
return ;
}
void bfs()
{
memset(h,,sizeof(h));//初始化哈希表
memset(h_2,,sizeof(h_2));
queue<State>Q;
Q.push(data);
hash(data)=;
check(data);
while (!Q.empty())
{
State u=Q.front(),v;Q.pop();
v=u;
//倒满的
if (v.a>=B-v.b) {v.a-=B-v.b;v.b=B;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.b>=A-v.a) {v.b-=A-v.a;v.a=A;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.a>=C-v.c) {v.a-=C-v.c;v.c=C;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.c>=A-v.a) {v.c-=A-v.a;v.a=A;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.c>=B-v.b) {v.c-=B-v.b;v.b=B;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.b>=C-v.c) {v.b-=C-v.c;v.c=C;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
//倒不满
if (v.a<B-v.b) {v.b+=v.a;v.a=;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.b<A-v.a) {v.a+=v.b;v.b=;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.a<C-v.c) {v.c+=v.a;v.a=;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.c<A-v.a) {v.a+=v.c;v.c=;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.c<B-v.b) {v.b+=v.c;v.c=;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
if (v.b<C-v.c) {v.c+=v.b;v.b=;if (hash(v)==) {Q.push(v);hash(v)=;check(v);}}v=u;
}
}
void check(State t)
{
if (t.a== && h_2[t.c]==)
{
ans[point++]=t.c;
h_2[t.c]=;
}
return;
}
【USACO 1.4.4】母亲的牛奶的更多相关文章
- 随手练——USACO 1.44 母亲的牛奶
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 洛谷 P1215:https://www.luogu.org/problemnew/show/P1215 解题思想:DFS 大一 ...
- 洛谷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桶是装满 ...
- 母亲的牛奶(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 ...
- USACO 1.4.2 Mother's Mil 母亲的牛奶(DFS)
Description 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,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.3.1】混合牛奶
[题目描述] 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助梅丽乳业找到最优的牛奶采购方案. 梅丽乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的. ...
随机推荐
- 【HDOJ】3325 Arithmetically Challenged
简单DFS. /* 3325 */ #include <iostream> #include <set> #include <cstdio> #include &l ...
- sed的选项与命令简要
第一部分:sed命令选项 sed选项 说明 -n, --quiet, --silent 静默模式,取消将模式空间中的内容自动打印出来. -e script, --expression=script 以 ...
- 【转】通知 Toast详细用法(显示view)
原文网址:http://www.pocketdigi.com/20100904/87.html 今天学习Android通知 Toast的用法,Toast在手机屏幕上向用户显示一条信息,一段时间后信息会 ...
- Delphi NativeXML 乱码的问题
我遇到 NativeXML 在它的一个节点的属性上面写入属性,但是当读出的值中包含汉字的时候出现了乱码.检查代码如下 NativeXml := TNativeXml.Create; try Nativ ...
- workflow4.0学习资料
http://www.cnblogs.com/foundation/archive/2010/04/03/1703809.html 2篇说明: WF4 Bata 2 WF4.0 RC 对比 Beta2 ...
- 动态规划——A 最大子段和
A - 最大子段和 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- [置顶] ruby变量详解(收集+整理)
ruby的变量有局部变量,全局变量,实例变量,类变量,常量. 1.局部变量 局部变量以一个小写字母开头或下划线开头 局部变量有局部作用域限制(比如一个block内),它的作用域起始于声明处,结束于该声 ...
- java 基础(匿名内部类)
匿名内部类 特点:不对外公开,进行实现功能,继承类,继承抽象类,实现某个接口的匿名内部类,实现相应的方法 特别注意:匿名内部类,匿名指的是 ,new 关键字右边的那个对象--如继承,或是接口 { ...
- 2016最新cocoapods版本更新,以及多个版本的问题
先删除之前的pod 在终端中执行下面命令. 删除目录下的podrm -rf /usr/local/bin/pod 执行gem list | grep cocoapods 查看所有与cocoapods相 ...
- Hard 不用+号实现两个数之和 @CareerCup
例子: 759+674 1)不考虑进位: 323 2)只考虑进位:1110 3)两者之和:1433 递归求解c package Hard; /** * Write a function that ...