DFS解决USACO——Mother's Milk
Sample Input
2 5 10
Sample Output
5 6 7 8 9 10
看到了这里的Rest数组没有,
既然是bool类型的,又学习了。
#include "iostream"
#include "string.h"
using namespace std;
#define size 21
bool Rest[size];
bool flag[size][size];
int A, B, C;
void DFS(int a, int b, int c)
{
if(flag[a][b]) return;
flag[a][b] = true;
if(a==0) Rest[c] = true;
//min防溢出,max防负数
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()
{
cin>>A>>B>>C;
memset(flag, false, sizeof(flag));
memset(Rest, false, sizeof(Rest));
DFS(0, 0, C);
for(int i=0; i<C; i++)
if(Rest[i])
cout<<i<<" ";
cout<<C<<endl;
}
posted on 2011-10-16 18:45 More study needed. 阅读(751) 评论(0) 编辑 收藏 举报