前言
今天zty带来的是P1215 [USACO1.4] 母亲的牛奶 Mother’s Milk,大家给个赞呗, zty开学了,更新是会变少的,这个学期是zty的毕业学期了,过完这学期zty就毕业了
先 赞 后 看 养 成 习 惯
先 赞 后 看 养 成 习 惯
演示用编译器及其标准
Dev C++ 6.7.5 Red panda C++14
正文
P1215 [USACO1.4] 母亲的牛奶 Mother’s Milk
题目描述
农民约翰有三个容量分别是 a , b , c a,b,c a,b,c 升的桶。
最初, a , b a,b a,b 桶都是空的,而 c c c 桶是装满牛奶的。有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。
当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。
写一个程序去帮助农民找出当 a a a 桶是空的时候, c c c 桶中牛奶所剩量的所有可能性。
输入格式
单独的一行包括三个整数 a , b , c a,b,c a,b,c。
输出格式
只有一行,升序地列出当 a a a 桶是空的时候, c c c 桶牛奶所剩量的所有可能性。
输入输出样例 #1
输入 #1
8 9 10
输出 #1
1 2 8 9 10
输入输出样例 #2
输入 #2
2 5 10
输出 #2
5 6 7 8 9 10
说明/提示
【数据范围】
对于 100 % 100\% 100% 的数据, 1 ≤ a , b , c ≤ 20 1\le a,b,c \le 20 1≤a,b,c≤20。
题目翻译来自NOCOW。
USACO Training Section 1.4
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 21;
int flag[N], tag[N][N][N], A, B, C;
void dfs(int a, int b, int c) {
if (tag[a][b][c])return;
tag[a][b][c] = 1;
if (!a)flag[c] = 1;
if (c >= (A - a))dfs(A, b, c - (A - a));
else dfs(a + c, b, 0);
if (c >= (B - b))dfs(a, B, c - (B - b));
else dfs(a, b + c, 0);
if (b >= (A - a))dfs(A, b - (A - a), c);
else dfs(a + b, 0, c);
if (b >= (C - c))dfs(a, b - (C - c), C);
else dfs(a, 0, b + c);
if (a >= (B - b))dfs(a - (B - b), B, c);
else dfs(0, a + b, c);
if (a >= (C - c))dfs(a - (C - c), b, C);
else dfs(0, b, a + c);
}
int main() {
cin >> A >> B >> C;
dfs(0, 0, C);
for (int i = 0; i <= C; i++) {
if (flag[i])cout << i << ' ';
}
return 0;
}
后记
作者:zty郑桐羽呀
联系方式:(企鹅 3782663736)
兄弟们给个赞呗
先 赞 后 看 养 成 习 惯