milk3解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  有三个桶,容量分别是A、B、C,开始C桶是满的。
  你可以不断将某个桶的奶倒到另一个桶里,但只允许全倒过去,或者将后者倒满,前者留下剩余的奶。
  请问,当A桶空时,C桶中的奶量可能有哪些值?
【数据范围】
  A、B、C均为1到20的整数
【输入格式】
  A B C
【输出格式】
  c1 c2 c3 .. cn(表示题目所求C桶可能的容量,升序排列)
【输入样例1】
  8 9 10
【输出样例1】
  1 2 8 9 10
【输入样例2】
  2 5 10
【输出样例2】
  5 6 7 8 9 10
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  直接暴力搜索,别想复杂了就好。
  三个桶所有的情况最多是20×20×20=8000种,很少的。
  设布尔型变量p[a][b][c]表示A桶奶量a、B桶奶量b、C桶奶量c的情况是否可能达到。
  开始,令p[0][0][C]=true;
  而后,开始搜索,每达到一种新的状态,就从此状态把六种倒法都试过来,搜索状态最多8000种,时间完全够。
  最后,看看p[0][b][c]的状态,让b从0取到20,看c都有可能取哪些值,记下来,按顺序输出即可。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  USACO评测真严格!行尾空格不忽略。想省点代码的,第一个点就WA了……
  第二次AC。

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

  1. /*
  2. ID: icedrea1
  3. PROB: milk3
  4. LANG: C++
  5. */
  6.  
  7. #include <iostream>
  8. #include <fstream>
  9. using namespace std;
  10.  
  11. int A,B,C;
  12. bool p[][][];
  13.  
  14. void go(int a,int b,int c)
  15. {
  16. //cout<<"go "<<a<<" "<<b<<" "<<c<<endl;
  17. int x,y,z;
  18. // a->b
  19. x=; y=a+b; z=c; if(y>B) { x=y-B; y=B; }
  20. if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
  21. // a->c
  22. x=; y=b; z=a+c; if(z>C) { x=z-C; z=C; }
  23. if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
  24. // b->a
  25. x=a+b; y=; z=c; if(x>A) { y=x-A; x=A; }
  26. if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
  27. // b->c
  28. x=a; y=; z=b+c; if(z>C) { y=z-C; z=C; }
  29. if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
  30. // c->a
  31. x=a+c; y=b; z=; if(x>A) { z=x-A; x=A; }
  32. if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
  33. // c->b
  34. x=a; y=b+c; z=; if(y>B) { z=y-B; y=B; }
  35. if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
  36. }
  37.  
  38. int main()
  39. {
  40. ifstream in("milk3.in");
  41. ofstream out("milk3.out");
  42.  
  43. in>>A>>B>>C;
  44.  
  45. p[][][C]=true; go(,,C);
  46.  
  47. bool can[]={};
  48. int a=;
  49. for(int b=;b<=B;++b)
  50. for(int c=;c<=C;++c)
  51. if(p[a][b][c]) can[c]=true;
  52.  
  53. int c;
  54. for(c=;c<=C;++c)
  55. if(can[c]) { out<<c; break; }
  56. for(++c;c<=C;++c)
  57. if(can[c]) out<<" "<<c;
  58. out<<endl;
  59.  
  60. in.close();
  61. out.close();
  62. return ;
  63. }

USACO Section1.4 Mother's Milk 解题报告的更多相关文章

  1. USACO Section1.2 Name That Number 解题报告

    namenum解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  2. USACO Section1.1 Friday the Thirteenth 解题报告

    friday解题报告 —— icedream61 博客园(转载请注明出处) -------------------------------------------------------------- ...

  3. USACO Section1.3 Ski Course Design 解题报告

    skidesign解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...

  4. USACO Section 1.4 Mother's Milk 解题报告

    题目 题目描述 有三个牛奶桶,三个桶的容积分别是A,B,C,最小为1,最大为20.刚开始只有第三个桶里面装满了牛奶,其余两个桶都是空的.我们现在可以将第三个桶中的牛奶往其他两个桶里面倒一些牛奶,然后还 ...

  5. USACO Section 1.3 Mixing Milk 解题报告

    题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...

  6. USACO Section1.3 Mixing Milk 解题报告

    milk解题报告 —— icedream61 博客园(转载请注明出处)----------------------------------------------------------------- ...

  7. USACO 1.4 Mother's Milk

    Mother's Milk Farmer John has three milking buckets of capacity A, B, and C liters. Each of the numb ...

  8. USACO Section 1.3 Prime Cryptarithm 解题报告

    题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...

  9. USACO Section 1.4 Arithmetic Progressions 解题报告

    题目 题目描述 现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你 ...

随机推荐

  1. nodejs一个函数实现消息队列中间件

    消息队列中间件(Message Queue)相信大家不会陌生,如Kafka.RabbitMQ.RocketMQ等,已经非常成熟,在大大小小的公司和项目中也已经广泛使用. 有些项目中,如果是只使用初步的 ...

  2. 初学React:组件的样式

    React中组件的样式有三种: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  3. hash函数的选择

    哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量. 一般来说,对任意一类的数据存在一个理论上完 ...

  4. 【洛谷5251】[LnOI2019] 第二代图灵机(线段树+ODT)

    点此看题面 大致题意: 有单点修改数字和区间着色两种修改操作,询问你某段区间内包含所有颜色且数字和最小的子区间的数字和,或某段区间内没有重复颜色且数字和最大的子区间的数字和.数据随机. \(ODT\) ...

  5. 【[SCOI2015]小凸玩矩阵】

    题目 第\(k\)大显然没有什么办法直接求,于是多一个\(log\)来二分一波 现在的问题变成了判断一个\(mid\)是否能成为第\(k\)大 这还是一个非常经典的棋盘模型,于是经典的做法就是转化成二 ...

  6. sql server 基础

    1 .左连接 select a.* ,b.* from student as aleft join hobby as bon a.hobbyid=b.hobbyid 2. 右 连接 select a. ...

  7. python基本使用时常见错误

    python基本使用时常见错误 字符编码错误 如果要学习计算机编程语言,首先就要搞懂字符编码,否则在以后的学习过程中,将会是一场噩梦.在一开始使用的时候,我就遇到了很多的关于字符编码的问题,做个简单的 ...

  8. JQuery基础原理 与实例 验证表单 省市联动 文本框判空 单选 复选 判空 下拉判空 确认密码判等

    JQuery 基础原理 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  9. H5新增的Web Storage本地存储

    html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(session)中的数据,这些数据只 ...

  10. Windows平台下源码分析工具

    最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处.处理过程.理论公式来源.注意事项,自己还没有弄明白的地方.目前的想法是把每一个 ...