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 }
心之所动 且就随缘去吧