问题 A: 母亲的牛奶(milk)

时间限制: 1 Sec  内存限制: 64 MB
提交: 14  解决: 8
[提交][状态][讨论版]

题目描述

农民约翰有三个容量分别是A、B、C升的桶,A、B、C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一
个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的,由于节约,牛奶不会丢失。写一个程序去帮助约翰找出当A桶是空的时候,C桶中
牛奶所剩量的所有可能性。

输入

单独的1行,包括三个整数A,B和C。

输出

只有1行,列出当A桶是空的时候,C桶牛奶所剩量的所有可能性。

样例输入

  1. 8 9 10

样例输出

  1. 1 2 8 9 10

  2. 【分析】用一个结构体存三个桶的状态,然后暴力BFS,最后用set存一下结果。
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <time.h>
  8. #include <string>
  9. #include <map>
  10. #include <stack>
  11. #include <vector>
  12. #include <set>
  13. #include <queue>
  14. #define inf 0x3f3f3f3f
  15. #define mod 1000000007
  16. typedef long long ll;
  17. using namespace std;
  18. const int N=;
  19. int n;
  20. int w[][];
  21. int g[];
  22. int a,b,c;
  23. set<int>p;
  24. struct man {
  25. int x,y,z;
  26. };
  27. void bfs(int aa,int bb,int cc) {
  28. w[aa][bb]=;
  29. queue<man>q;
  30. man s;
  31. s.x=;
  32. s.y=;
  33. s.z=cc;
  34. q.push(s);
  35. while(!q.empty()) {
  36. man t=q.front();
  37. q.pop();
  38. if(t.x==)p.insert(t.z);
  39. int f[];
  40.  
  41. for(int i=; i<; i++) {
  42. f[]=t.x;f[]=t.y; f[]=t.z;
  43. if(f[i]==)continue;
  44. for(int j=; j<; j++) {
  45. f[]=t.x; f[]=t.y; f[]=t.z;
  46. man k;
  47. if(i==j||f[j]==g[j])continue;
  48. if(f[i]+f[j]>=g[j]) {
  49. f[i]=f[i]-(g[j]-f[j]);
  50. f[j]=g[j];
  51. } else if(f[i]+f[j]<g[j]) {
  52. f[j]+=f[i];
  53. f[i]=;
  54. }
  55. k.x=f[];
  56. k.y=f[];
  57. k.z=f[];
  58. if(w[k.x][k.y]==) {
  59. q.push(k);
  60. w[k.x][k.y]=;
  61. }
  62. }
  63. }
  64. }
  65. }
  66.  
  67. int main() {
  68. memset(w,,sizeof(w));
  69. cin>>a>>b>>c;
  70. g[]=a;
  71. g[]=b;
  72. g[]=c;
  73. bfs(a,b,c);
  74. int r[],mm=;
  75. for(set<int>::iterator it=p.begin();it!=p.end();it++)
  76. {
  77. r[mm++]=*it;
  78. }
  79. sort(r,r+mm);cout<<r[];
  80. for(int i=;i<mm;i++)cout<<" "<<r[i];cout<<endl;
  81. return ;
  82. }

母亲的牛奶(milk) (BFS)的更多相关文章

  1. 母亲的牛奶(milk)

    母亲的牛奶(milk) 题目描述 农民约翰有三个容量分别是A.B.C升的桶,A.B.C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直 ...

  2. 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk

    P1215 [USACO1.4]母亲的牛奶 Mother's Milk 217通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 ...

  3. P1215 [USACO1.4]母亲的牛奶 Mother's Milk

    P1215 [USACO1.4]母亲的牛奶 Mother's Milk 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满 ...

  4. 随手练——USACO 1.44 母亲的牛奶

    P1215 [USACO1.4]母亲的牛奶 Mother's Milk 洛谷 P1215:https://www.luogu.org/problemnew/show/P1215 解题思想:DFS 大一 ...

  5. 洛谷 P2744 [USACO5.3]量取牛奶Milk Measuring

    P2744 [USACO5.3]量取牛奶Milk Measuring 题目描述 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最 ...

  6. luogu P1215 [USACO1.4]母亲的牛奶 Mother's Milk

    题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...

  7. 洛谷 P1215 [USACO1.4]母亲的牛奶 Mother's Milk

    题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...

  8. 洛谷 P1215 【[USACO1.4]母亲的牛奶 Mother's Milk】

    这道题\(DFS\)就好了,六种情况,\(ab,ac,ba,bc,ca,cb\),我们直接枚举就可.什么?这样不会结束?用一个\(vis\)数组判断走过没有就可以了.最后排序输出即可. \(code: ...

  9. 【USACO 1.4.4】母亲的牛奶

    [题目描述]  农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原 ...

随机推荐

  1. 洛谷P1273 有线电视网 (树上分组背包)

    洛谷P1273 有线电视网 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节 ...

  2. Codeforces Round #478 C. Valhalla Siege

    C. Valhalla Siege time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  3. 继承spring的validator接口,实现对数据的校验

    在org.springframework.validation这个包中提供了一些对数据校验的方法,其中Validator接口是其中的一个. 现在用Validator接口,完成对数据的校验. 第一步:先 ...

  4. oracle的sequece的使用(主键自增长)

    在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方. 1.Create Sequence (注释:你需要有CREATE S ...

  5. bzoj1015: [JSOI2008]星球大战starwar 并查集+离线处理

    题目传送门 这道题可以改为离线处理 倒着找答案 这样删点就变成加点了 有了这个思想题目就很好写了哇 23333 #include<cstdio> #include<cstring&g ...

  6. ThinkPHP 多应用多模块建立方式

    ThinkPHP3.2.2及以后版本同一应用多模块和多应用多模块的设计已经比以前的版本更加简单快捷. 注:入口文件为index.php,内容为: <?php // +-------------- ...

  7. IPC网络高清摄像机基础知识4(Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别) 【转】

    转自:http://blog.csdn.net/times_poem/article/details/51682785 [-] 一 概念介绍 二 两个疑问 三 RAW和JPEG的区别 1 概念说明 3 ...

  8. socket中的函数遇见EINTR的处理【转】

    转自:http://blog.chinaunix.net/uid-21501855-id-4490453.html 这几天,写服务器代码过程当中,遇见EINRT信号的问题,我是借鉴 <unp & ...

  9. (二十八)fopen与读写的标识r,r+,rb+,rt+,w+.....

    fopen与读写的标识r,r+,rb+,rt+,w+..... 函数简介 函数功能: 打开一个文件 函数原型:FILE * fopen(const char * path,const char * m ...

  10. Linux 的源码安装工具 CheckInstall

    Linux 的源码安装工具 CheckInstall Checkinstall 是一个能从 tar.gz 类的 https://www.ibm.com/developerworks/cn/linux/ ...