USACO1.4.2 Mother's Milk (milk3)
2015-01-27 17:45
525 查看
DFS
因为牛奶的总量是不变的,所以可以用a,b,c中的牛奶量做状态,初始状态是(0,0,c)。
每次只能有6种选择,a倒b,a倒c,b倒a,b倒c,c倒a,c倒b,用一个数组vis[i][j][k]判重。
对于每一个答案,判断没有出现过在加入答案。搜索完毕快排,输出即可。
因为牛奶的总量是不变的,所以可以用a,b,c中的牛奶量做状态,初始状态是(0,0,c)。
每次只能有6种选择,a倒b,a倒c,b倒a,b倒c,c倒a,c倒b,用一个数组vis[i][j][k]判重。
对于每一个答案,判断没有出现过在加入答案。搜索完毕快排,输出即可。
/* ID:xsy97051 PROB:milk3 LANG:C++ */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; long ans[50],p=-1; long a,b,c; bool vis[50][50][50]; bool isIn(long C) { bool in=0; for (long i=0;i<=p;i++) { if (ans[i]==C) { in=1; break; } } return in; } void dfs(long A,long B,long C) { if (vis[A][B][C]) return; vis[A][B][C]=1; if (A==0) { if(!isIn(C)) { ans[++p]=C; } } if (A<=b-B) dfs(0,B+A,C); //A->B else dfs(A-(b-B),b,C); if (A<=c-C) dfs(0,B,C+A); //A->C else dfs(A-(c-C),B,c); if (B<=a-A) dfs(A+B,0,C); //B->A else dfs(a,B-(a-A),C); if (B<=c-C) dfs(A,0,C+B); //B->C else dfs(A,B-(c-C),c); if (C<=a-A) dfs(A+C,B,0); //C->A else dfs(a,B,C-(a-A)); if (C<=b-B) dfs(A,B+C,0); //C->B else dfs(A,b,C-(b-B)); return; } int main() { freopen("milk3.in","r",stdin); freopen("milk3.out","w",stdout); memset(ans,0,sizeof(ans)); memset(vis,0,sizeof(vis)); cin>>a>>b>>c; dfs(0,0,c); sort(ans,ans+p+1); for(long long i=0;i<=p;i++) { if (i!=0) cout<<' '; cout<<ans[i]; } cout<<endl; return 0; }
相关文章推荐
- USACO1.4.2 Mother's Milk (milk3)
- USACO 1.4.2 Mother's Milk
- Usaco 1.4.4 母亲的牛奶(Mother's Milk)
- [USACO 1.4.4] Mother's Milk
- Mother's Milk(usaco)
- USACO Mother's Milk
- USACO Mother's Milk, Number Triangles
- USACO:Mother's Milk
- USACO Section 1.4 Mother's Milk - 输出错了好几次..
- USACO Section 1.4 Mother's Milk
- 【USACO】Mother's Milk(搜索)
- USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)
- USACO Mother's Milk
- USACO-Section 1.4 Mother's Milk(BFS)
- usaco mother'smilk
- Mother's Milk
- USACO 1.4 Mother's Milk (milk3)
- USCAO section Mother's Milk(搜索)
- Mother's Milk母亲的牛奶
- 1.4Mother's Milk