USACO1.5 Mother's Milk【搜索】

题目传送门

这道题还记得是我当年学广搜的时候做过。

如今再做,做了一个$dfs$版本的,比较简单,直接搞就可以了。

广搜的话,用结构体保存,然后塞到$queue$里面就可以了。

 1 /*
 2 ID: Starry21
 3 LANG: C++
 4 TASK: ariprog                 
 5 */  
 6 #include<iostream>
 7 #include<string>
 8 #include<cstdio>
 9 #include<cstring>
10 #include<vector>
11 #include<algorithm>
12 using namespace std;
13 #define N 25
14 #define ll long long
15 #define INF 0x3f3f3f3f
16 int a,b,c;
17 bool vis[25];
18 bool pd[N][N][N];
19 void dfs(int A,int B,int C)
20 {
21     if(pd[A][B][C]) return ;
22     pd[A][B][C]=1;
23     if(A!=0)
24     {
25         int delta=min(A,b-B);
26         if(delta!=0) dfs(A-delta,B+delta,C);
27         delta=min(A,c-C);
28         if(delta!=0) dfs(A-delta,B,C+delta);
29     }
30     if(B!=0)
31     {
32         int delta=min(B,a-A);
33         if(delta!=0) dfs(A+delta,B-delta,C);
34         delta=min(B,c-C);
35         if(delta!=0) dfs(A,B-delta,C+delta);
36     }
37     if(C!=0)
38     {
39         int delta=min(C,b-B);
40         if(delta!=0) dfs(A,B+delta,C-delta);
41         delta=min(C,a-A);
42         if(delta!=0) dfs(A+delta,B,C-delta);
43     }
44     if(A==0)
45     {
46         vis[C]=1;
47         return ;
48     }
49     return ;
50 }
51 int main() 
52 {
53     //freopen("ariprog.in","r",stdin);
54     //freopen("ariprog.out","w",stdout);
55     scanf("%d %d %d",&a,&b,&c);
56     dfs(0,0,c);
57     for(int i=0;i<=20;i++)
58         if(vis[i])
59             printf("%d ",i);
60     return 0;
61 }
Code

猜你喜欢

转载自www.cnblogs.com/lyttt/p/11644786.html