【模拟递规】Mother's Milk 母亲的牛奶 (Usaco_Training 1.4)
2012-10-18 09:46
645 查看
Mother's Milk
Farmer John has three milking buckets of capacity A, B, and C liters. Each of the numbers A, B, and C is an integer from 1 through 20, inclusive. Initially, buckets A and B are empty while bucket C is full of milk. Sometimes, FJ pours milk from one bucket to another until the second bucket is filled or the first bucket is empty. Once begun, a pour must be completed, of course. Being thrifty, no milk may be tossed out.
Write a program to help FJ determine what amounts of milk he can leave in bucket C when he begins with three buckets as above, pours milk among the buckets for a while, and then notes that bucket A is empty.
这一题和汉诺塔相似,用递规解决即可
主要注意几种转移状态即可
C++ Code
Farmer John has three milking buckets of capacity A, B, and C liters. Each of the numbers A, B, and C is an integer from 1 through 20, inclusive. Initially, buckets A and B are empty while bucket C is full of milk. Sometimes, FJ pours milk from one bucket to another until the second bucket is filled or the first bucket is empty. Once begun, a pour must be completed, of course. Being thrifty, no milk may be tossed out.
Write a program to help FJ determine what amounts of milk he can leave in bucket C when he begins with three buckets as above, pours milk among the buckets for a while, and then notes that bucket A is empty.
PROGRAM NAME: milk3
INPUT FORMAT
A single line with the three integers A, B, and C.SAMPLE INPUT (file milk3.in)
8 9 10
OUTPUT FORMAT
A single line with a sorted list of all the possible amounts of milk that can be in bucket C when bucket A is empty.SAMPLE OUTPUT (file milk3.out)
1 2 8 9 10
SAMPLE INPUT (file milk3.in)
2 5 10
SAMPLE OUTPUT (file milk3.out)
5 6 7 8 9 10
这一题和汉诺塔相似,用递规解决即可
主要注意几种转移状态即可
C++ Code
/* ID: jiangzh15 TASK: milk3 LANG: C++ http://oijzh.cnblogs.com */ #include<cstdio> #include<vector> #include<queue> using namespace std; priority_queue<int,vector<int>,greater<int> > q; int A,B,C; bool h[30][30][30]; void dfs(int x,int y,int z) { if(h[x][y][z])return; if(x==0) q.push(z); h[x][y][z]=true; //1->2 if(x+y<=B) dfs(0,x+y,z); else if(x+y>B) dfs(x-(B-y),B,z); //1->3 if(x+z<=C) dfs(0,y,x+z); else if(x+z>C) dfs(x-(C-z),y,C); //2->1 if(x+y<=A) dfs(x+y,0,z); else if(x+y>A) dfs(A,y-(A-x),z); //2->3 if(y+z<=C) dfs(x,0,y+z); else if(y+z>C) dfs(x,y-(C-z),C); //3->1 if(z+x<=A) dfs(x+z,y,0); else if(z+x>A) dfs(A,y,z-(A-x)); //3->2 if(y+z<=B) dfs(x,y+z,0); else if(y+z>B) dfs(x,B,y-(B-z)); } int main() { freopen("milk3.in","r",stdin); freopen("milk3.out","w",stdout); scanf("%d%d%d",&A,&B,&C); dfs(0,0,C); while(q.size()>1){printf("%d ",q.top());q.pop();} printf("%d\n",q.top()); return 0; }
相关文章推荐
- 【模拟递规】Mother's Milk 母亲的牛奶 (Usaco_Training 1.4)
- luogu P1215 [USACO1.4]母亲的牛奶 Mother's Milk
- 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk
- P1215 [USACO1.4]母亲的牛奶 Mother's Milk
- USACO1.4 母亲的牛奶 Mother's Milk
- 【搜索】洛谷 P1215 [USACO1.4]母亲的牛奶 Mother's Milk
- USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)
- Usaco 1.4.4 母亲的牛奶(Mother's Milk)
- 【模拟枚举】Arithmetic Progressions等差数列(Usaco_Training 1.4)
- SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
- 竞赛题目-【USACO TRAINING】母亲的牛奶
- 【模拟枚举】Arithmetic Progressions等差数列(Usaco_Training 1.4)
- 【USACO TRAINING】母亲的牛奶(洛谷1215题)
- 【USACO 1.4】Mother's Milk
- 一大堆的福利之【USACO题库】Mother's Milk母亲的牛奶
- USACO 1.4 Mother's Milk(BFS)
- USACO1.4 母亲的牛奶
- [USACO1.4]母亲的牛奶Mother's Milk dfs
- USACO:1.4.4 Mother's Milk 母亲的牛奶 解析
- USACO Section 1.4 Mother's Milk(BFS)