USACO Mother's Milk

/*
ID: jinusac1
PROG: milk3
LANG: C++
*/
#include <iostream>
#include <cstdio>
using namespace std;
bool r[30]={false},ss[203000]={false};
int A,B,C;
void dfs(int a,int b,int c)
{
	int num=a*10000+b*100+c;
	if(ss[num]) return ;
	ss[num]=true;
	if(!a) r[c]=true;
	if(a){
		if(a>(B-b)) dfs(a-B+b,B,c);
		else dfs(0,b+a,c);

		if(a>(C-c)) dfs(a-C+c,b,C);
		else dfs(0,b,c+a);
	}

	if(b){
		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,c+b);
	}

	if(c){
		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);
	}
}
int main()
{
	cin>>A>>B>>C;
	dfs(0,0,C);
	for(int i=0;i<C;i++) if(r[i])
		cout<<i<<" ";
	cout<<C<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值