luogu P1215 母亲的牛奶 搜索

 1 //因为每个桶的上限只有20,最多只有20*20*20个状态,我们用vis[x][y][z]表示一个状态是否被搜索过。然后每次尝试各种转移,发现答案就记录答案。 
 2 #include <cstdio>
 3 #include <vector>
 4 #include <algorithm>
 5 using namespace std;
 6 bool ans[30],vis[30][30][30];
 7 int a,b,c;
 8 void dfs(int x,int y,int z)
 9 {//A桶装了x,B桶装了y,C桶装了z。 
10     if (vis[x][y][z] == true)
11         return;
12     vis[x][y][z] = true;
13     if (x == 0)
14         ans[z] = true;
15     //x->y
16     dfs(x - min(x,b - y),y + min(x,b - y),z);
17     //x->z
18     dfs(x - min(x,c - y),y,z + min(x,c - y));
19     //y->x
20     dfs(x + min(y,a - x),y - min(y,a - x),z);
21     //y->z
22     dfs(x,y - min(y,c - z),z + min(y,c - z));
23     //z->x
24     dfs(x + min(z,a - x),y,z - min(z,a - x));
25     //z->y
26     dfs(x,y + min(z,b - y),z - min(z,b - y)); 
27 }
28 int main()
29 {
30     scanf("%d%d%d",&a,&b,&c);
31     dfs(0,0,c);
32     for (int i = 0;i <= 20;i++)
33         if (ans[i] == true)
34             printf("%d ",i);
35     return 0;
36 }

 

posted @ 2019-07-06 17:08  IAT14  阅读(207)  评论(0编辑  收藏  举报