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

USACO1.5 Mother's Milk【搜索】

原文地址:https://www.cnblogs.com/lyttt/p/11644786.html

时间: 2024-11-08 20:31:24

USACO1.5 Mother's Milk【搜索】的相关文章

洛谷 P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例#1:

$P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk$

\(problem\) 搜索 找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 显然 我们需要一个数组来判重 表示这种状态出现过没有. 然而 储存答案. 需要一个桶?或者sort咯 不过多个cnt 我咧懒得打. 所以我们用一个\(vis[N][N][N] ;\) 来判重 表示这种状态出现过没有 出现过就直接返回. 然后用一个ans数组来储存答案\(ans[N] ;\) 都是布尔型的就行. 然后进入程序片段. 一共三个字母 则倒法有 \(3!=1*2*3=6\). 那就手工模拟好了.不用循环了

luogu P1215 [USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例#1:

【USACO】Mother&#39;s Milk(搜索)

一开始还在想去重的问题,结果发现后台数据貌似没有重复的情况= = /* ID: 18906421 LANG: C++ PROG: milk3 */ #include<cmath> #include<cstdio> #include<vector> #include<algorithm> using namespace std; const int maxn = 25; int vis[maxn][maxn][maxn] = {0}; vector<in

[USACO1.4]母亲的牛奶 Mother&#39;s Milk

题目 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了.当然每一次灌注都是完全的.由于节约,牛奶不会有丢失. 写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性. 输入输出格式 输入格式: 单独的一行包括三个整数A,B和C. 输出格式: 只有一行,升序地列出当A桶是空的时候,C桶牛奶所剩量的所有可能性. 输入输出样例 输入样例

usaco Mother&#39;s Milk

给了三个木桶的容量,起始状态下C木桶装满,然后三个木桶相互倒牛奶,问当A木桶为空时的C木桶的牛奶体积的可能情况. 直接深度优先搜索,模拟三个木桶相互倒的情况 相互倒得情况本可以写的更简洁,但为了可阅读性我并没有这么干 不过这道题在本机上调试时,我曾将一个我认为无关紧要的地方写错,因为两个数组大小一样,所以在sizeof的括号中写了另外一个,结果却出不了正解. 有机会要好好查查memcyp函数的用法. /* ID: modengd1 PROG: milk3 LANG: C++ */ #includ

USACO Section1.4 Mother&#39;s Milk 解题报告

milk3解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 有三个桶,容量分别是A.B.C,开始C桶是满的. 你可以不断将某个桶的奶倒到另一个桶里,但只允许全倒过去,或者将后者倒满,前者留下

Mother&#39;s Milk

本题中, 三个桶,因此就是6种:A->B A->C B->A B->C C->A C->B.所有转移都考虑一遍即可. 以A->B来说,这样转移之后状态是什么呢?A的 牛奶数应该是max(0, a+b-B),其中a,b是A和B桶中原来牛奶的数量,A,B是A和B桶的容量.B的牛奶数是 min(a+b, B),其他的以此类推.本题就差不多了.~ 代码: /* ID:Andy Chen PROG: milk3 LANG: C++ */ #include <cstdi

USACO 1.4 Mother&#39;s Milk

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 m