【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】混合牛奶
[题目描述] 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助梅丽乳业找到最优的牛奶采购方案. 梅丽乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的. ...
随机推荐
- 数据结构(线段树):BZOJ 1103 [POI2007]大都市meg
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1791 Solved: 925[Submit][Stat ...
- 老罗android开发视频教程学习完了
让我学到了android的文件结构,事件窗口数据传递,百度地图开发很感谢
- hdu4666 最远曼哈顿距离
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4666 #include <cstdio> #include <cstring> ...
- DOM解析原理
用于处理XML文档的DOM元素属性 childNodes:返回当前元素所有子元素的数组: firstChild:返回当前元素的第一个下级子元素: lastChild:返回当前元素的最后一个子元素: n ...
- 布隆过滤器的java实现
package com.kaikeba.data.jobspider.util; import java.util.BitSet; public class Bloomfilter { private ...
- POJ 1686 Lazy Math Instructor (模似题+栈的运用) 各种坑
Problem Description A math instructor is too lazy to grade a question in the exam papers in which st ...
- linux下ssh免密登陆
如果 有A.B两台主机: 要实现的效果: A主机ssh登录B主机无需输入password: 加密方式选 rsa|dsa均能够.默认rsa 做法: 1.登录A主机 2.ssh-keygen -t [rs ...
- TabBarController创建及使用方法简介
TabBarController创建及使用方法简介 大致讲解一下TabBarController的创建过程: 首先,我们需要一些视图,如创建UIControllerView类型的view1,view2 ...
- 用crontab设置svn的定期更新任务
本以为用crontab设置svn的定期更新任务是件非常容易的事情,实践后方才知道,其实并不那么容易.设置例行性工作如下:0 8 * * * /usr/bin/svn up /data/test第二天, ...
- Android蓝牙操作笔记(转)
蓝牙是一种支持设备短距离传输数据的无线技术.android在2.0以后提供了这方面的支持. 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 ...