您的位置:首页 > 其它

USACO Mother's Milk

2015-02-24 10:53 295 查看
【题意】

给定3个牛奶桶深度分别为A,B,C,开始时深度为A,B的桶空,C的装满。每次从一个桶往另一个倒牛奶,只能让另一个倒满或者这个倒空。求但A的桶空时,C的牛奶量有多少,输出所有可能的情况。0<=A,B,C<=20

【分析】暴搜

【代码】

/*
ID:y2007031
PROG:milk3
LANG:C++
*/

#include <cstdio>
#include <cstring>
#include <cstdlib>

using namespace std;

int A,B,C;
int f[40][40][40],v[40],p[40];

int min(int i,int j)
{
return i<j?i:j;
}

void DFS(int a,int b,int c)
{
if (f[a][b][c]) return;
f[a][b][c]=1;
int pour=min(a,B-b);
DFS(a-pour,b+pour,c);
pour=min(a,C-c);
DFS(a-pour,b,c+pour);
pour=min(b,A-a);
DFS(a+pour,b-pour,c);
pour=min(b,C-c);
DFS(a,b-pour,c+pour);
pour=min(A-a,c);
DFS(a+pour,b,c-pour);
pour=min(B-b,c);
DFS(a,b+pour,c-pour);
}

int main(void)
{
freopen("milk3.in","r",stdin);
freopen("milk3.out","w",stdout);

scanf("%d%d%d",&A,&B,&C);

DFS(0,0,C);
for (int i=0;i<=C;i++)
if (f[0][C-i][i]) p[++p[0]]=i;

for (int i=1;i<p[0];i++) printf("%d ",p[i]);
printf("%d\n",p[p[0]]);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: