1.4 milk3 倒牛奶

广度优先搜索,用数组记录到达过的状态

 

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.
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

/* ID: xdzhbin1 LANG: C++ TASK: milk3 */ #include using namespace std; int A,B,C; //三个杯子的容量 int min(int n1, int n2) //返回两个数中较小的一个 { return n1>n2 ? n2 : n1; } void pull(int a, int b, int c, bool m[][21][21], bool cup[21]) { if(a==0) cup[c] = true; //a为空时,记录c中的牛奶量 int vol; if(a>0&&b0&&c0&&a0&&c0&&a0&&b>A>>B>>C; //读入容量 int c = C; //C中的牛奶量 milks[0][0][c] = true; ccup[c] = true; pull(0,0,c,milks,ccup); bool space = false; for(i=0; i<21; i++) { if(ccup[i]) { if(space) out<<" "; out<

你可能感兴趣的:(USACO)