您的位置:首页 > 其它

USACO中的搜索

2014-03-12 15:40 351 查看
Mother's Milk

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
using namespace std;
const int n = 25;
int flag

;
int re
;
int A,B,C;
void DFS(int a,int b,int c)
{
if(a == 0)
re[c] = 1;
if(flag[a][b]) return;
flag[a][b] = 1;
if(a>0 && b<B) //A向B倒, c不变
DFS(max(0, a+b-B), min(B, a+b), c);
if(a>0 && c<C) //A向C倒,b不变
DFS(max(0, a+c-C), b, min(C, a+c));
if(b>0 && a<A) //B向A倒,c不变
DFS(min(A, a+b), max(0, b+a-A), c);
if(b>0 && c<C) //B向C倒,a不变
DFS(a, max(0, b+c-C), min(C, b+c));
if(c>0 && a<A) //C向A倒,b不变
DFS(min(A, a+c), b, max(0, a+c-A));
if(c>0 && b<B) //C向B倒,a不变
DFS(a, min(B, b+c), max(0, b+c-B));
}

int main()
{
freopen("milk3.in","r",stdin);
freopen("milk3.out","w",stdout);
cin>>A>>B>>C;
memset(flag,0,sizeof(flag));
memset(re,0,sizeof(re));
DFS(0,0,C);
for(int i = 0; i < C; i++)
{
if(re[i])
cout<<i<<" ";
}
cout<<C<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: