[USACO 1.4.4]母亲的牛奶
地址:http://hustoj.sinaapp.com/problem.php?id=1832
对于搜索不够敏感,其实与状态有关的,且存在状态改变的,都可以考虑一下搜索
这题就是DFS
给出A,B,C三个桶的大小,(0,0,C)——也就是说C桶是满的,从这个状态开始互相倒来倒去,输出A桶为0时,C桶可能的牛奶量
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int a,b,c,con; 6 bool s[21][21][21],flag[21]; 7 8 void dfs(int x,int y,int z) 9 { 10 if(s[x][y][z]) return; 11 s[x][y][z]=true; 12 if(0==x && !flag[z]) {flag[z]=true;con++;} 13 dfs(x-min(x,b-y),min(x+y,b),z);//A->B 14 dfs(x-min(x,c-z),y,min(x+z,c));//A->C 15 dfs(min(x+y,a),y-min(y,a-x),z);//B->A 16 dfs(x,y-min(y,c-z),min(y+z,c));//B->C 17 dfs(min(x+z,a),y,z-min(z,a-x));//C->A 18 dfs(x,min(y+z,b),z-min(z,b-y));//C->B 19 } 20 21 int main() 22 { 23 ios::sync_with_stdio(false); 24 int c_a=0; 25 cin>>a>>b>>c; 26 dfs(0,0,c); 27 for(int i=0;i<21;i++) 28 { 29 if(flag[i]) 30 { 31 c_a++; 32 cout<<i; 33 if(c_a!=con) cout<<" "; 34 else break; 35 } 36 } 37 cout<<endl; 38 return 0; 39 }