题目

题目描述

有三个牛奶桶,三个桶的容积分别是A,B,C,最小为1,最大为20。刚开始只有第三个桶里面装满了牛奶,其余两个桶都是空的。我们现在可以将第三个桶中的牛奶往其他两个桶里面倒一些牛奶,然后还可以将其他两个桶往另一个桶中倒牛奶,但是我们在操作的时候有严格的要求:

从一个桶往另一个桶中倒牛奶,要么直到第二个桶已经装满了,要么直到第一个桶已经空了。在倒牛奶的过程中不允许浪费。

在来回经过一系列的倒牛奶的操作之后,现在我们需要知道当第一个牛奶桶为空的时候,第三个牛奶桶可能的牛奶量为多少。

输入

一行输入三个整数 A,B,C。

输出

按照从小到大的顺序输出当第一个桶为空时第三个桶中的可能牛奶量。

输入样例

8 9 10

输出样例

1 2 8 9 10

输入样例

2 5 10

输出样例

5 6 7 8 9 10

题目分析

最开始拿到这个题目的时候想过用枚举的方法来实现,但是在如何处理状态的地方卡住了,不知道怎样才能停止。基础还是不扎实啊,思维不够。

用暴力枚举来求解这个题目,因为每个桶的状态最多为20,那么最多的状态为20*20*20=8000,这个数据量不算大,所以我们可以用一个三维的布尔类型状态数组来记录。states[a][b][c]表示三个桶的牛奶分别为a,b,c时的状态。状态是通过倒牛奶的操作来实现的,只有6种操作来转移状态:

A->B A->C B->A B->C C->A C->B,我们只要将这六种操作模拟出来就行了。

代码

/*
ID: yinzong2
PROG: milk3
LANG: C++11
*/
#define MARK
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 21; int A,B,C;
int states[maxn][maxn][maxn]; void solve(int a, int b, int c); void next(int x, int y, int z) {
if (!states[x][y][z]) {
states[x][y][z] = true;
solve(x, y, z);
}
}
// 枚举所有的可能状态,如果某个状态已经到达过,那么就不需要处理它
void solve(int a, int b, int c) {
int x, y, z;
// A->B
x = 0; y = a+b; z = c;
if (y > B) {
x = y-B;
y = B;
}
next(x, y, z);
// A->C;
x = 0; y = b; z = a+c;
if (z > C) {
x = z-C;
z = C;
}
next(x, y, z);
// B->A
x = a+b; y = 0; z = c;
if (x > A) {
y = x-A;
x = A;
}
next(x, y, z);
// B->C
x = a; y = 0; z = b+c;
if (z > C) {
y = z-C;
z = C;
}
next(x, y, z);
// C->A
x = a+c; y = b; z = 0;
if (x > A) {
z = x-A;
x = A;
}
next(x, y, z);
// C->B
x = a; y = b+c; z = 0;
if (y > B) {
z = y-B;
y = B;
}
next(x, y, z);
} int main() {
#ifdef MARK
freopen("milk3.in", "r", stdin);
freopen("milk3.out", "w", stdout);
#endif // MARK
while (cin >> A >> B >> C) {
memset(states, false, sizeof(states));
states[0][0][C] = true;
solve(0, 0, C);
bool first = true;
for (int c = 0; c <= C; ++c) {
if (states[0][C-c][c]) {
if (!first) cout << " ";
cout << c;
first = false;
}
}
cout << endl;
}
return 0;
}

USACO Section 1.4 Mother's Milk 解题报告的更多相关文章

  1. USACO Section1.4 Mother's Milk 解题报告

    milk3解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  2. USACO Section 1.3 Ski Course Design 解题报告

    题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...

  3. USACO Section 1.2 Name That Number 解题报告

    题目 题目描述 在一个农场里面,每一头牛都有一个数字编号,但是现在这些牛不喜欢这种编号,它们想把这些数字编号转化成为可以接受的字母的形式.数字与字母的转换表如下: 2: A,B,C 5: J,K,L ...

  4. USACO Section 1.1 Friday the Thirteenth 解题报告

    题目 题目描述 黑色星期五是否真的是一件不同寻常的事情?按理来说每个月的13号可能是星期一,或者是星期二...或者是星期天,但是黑色星期五的存在让我们不禁开始猜想,难道每个月的13号刚好是星期五的频率 ...

  5. USACO Section 1.1 Greedy Gift Givers 解题报告

    题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...

  6. USACO Section1.3 Mixing Milk 解题报告

    milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...

  7. USACO Section2.1 Sorting a Three-Valued Sequence 解题报告

    sort3解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  8. USACO Section 1.3 Mixing Milk 解题报告

    题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...

  9. Section 1.4 Mother's Milk

    又是一道怨念已久的题目0 0之前深搜写过广搜写过,怎么就是卡死,我还以为FP坏了重新装了一遍.今天偶尔翻起来,发现广搜忘记inc(head)了…简直哭瞎… 简单的广搜,分类比较多,不过不太要动脑子.至 ...

随机推荐

  1. go语言之行--网络编程、http处理流程详情

    一.简介 go语言中的网络编程主要通过net包实现,net包提供了网络I/O接口,包括HTTP.TCP/IP.UDP.域名解析和Unix域socket等.和大多数语言一样go可以使用几行代码便可以启动 ...

  2. 20155217《网络对抗》Exp09 Web安全基础实践

    20155217<网络对抗>Exp09 Web安全基础实践 实践内容 关于webgoat:询问了很多人在安装webgoat时出现了错误,安装失败,因此直接通过同学copy了老师的虚拟机进行 ...

  3. 【Qt】QOpenGLWidget展示蒙版效果

    关键代码是派生QOpenGLWidget,覆写paintEvent函数 QPainter p; p.begin(this); p.drawImage(QPoint(, ), m_Img); QLine ...

  4. 对JSON传递图片Base64编码的一点总结

    项目中跟Java对接的时候需要传输图片,经过Base64编码后传输的. 但是实际调试的时候发现Java那边始终无法正常解析出图片. 冷静想想之后,发现问题在于使用OpenCV读取图片,编码的是Mat: ...

  5. vuex实践之路——笔记本应用(一)

    首先使用vue-cli把环境搭建好. 介绍一下应用的界面. App.vue根组件,就是整个应用的最外层 Toolbar.vue:最左边红色的区域,包括三个按钮,添加.收藏.删除. NoteList.v ...

  6. 阿里云ECS服务器源配置

    前段时间领取了阿里云ECS免费试用6个月的福利,此处记录一下服务器源配置过程和服务器用户创建过程. 一.CentOS源配置 1.备份 mv /etc/yum.repos.d/CentOS-Base.r ...

  7. MatCap冰冻效果Shader

    MatCap方案 使用说明 制作合适的MatCap贴图 这张图决定冰像不像,网上找.Vray渲个球.ASE或者ShaderForge连,甚至直接手绘,总之只要一张长得像下面的图 注意MatCap图只有 ...

  8. 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget

    目录 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois Puget 正文 对我的启发 机器学习英雄访谈录之双料 Kaggle 大师:Dr. Jean-Francois ...

  9. webpack简单原理及用法

    前言 如果你已经对Webpack精通了或者至少一直在工作中使用它,请关闭当前浏览器标签,无视这篇文章. 这篇文章本意是写给我自己看的,作为一篇Cookbook供快速查询和上手用.原因是虽然工作中会涉及 ...

  10. 《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 一.linux内核源代码简介 三大法宝(存储程序计算机.函数调用堆栈.中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场.进程上下文的切换) 1.在lin ...