P1215 [USACO1.4] 母亲的牛奶 Mother‘s Milk

前言

今天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 1a,b,c20

题目翻译来自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)
兄弟们给个赞呗
先 赞 后 看 养 成 习 惯