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。

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

【代码】

 /*
ID: icedrea1
PROB: milk3
LANG: C++
*/ #include <iostream>
#include <fstream>
using namespace std; int A,B,C;
bool p[][][]; void go(int a,int b,int c)
{
//cout<<"go "<<a<<" "<<b<<" "<<c<<endl;
int x,y,z;
// a->b
x=; y=a+b; z=c; if(y>B) { x=y-B; y=B; }
if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
// a->c
x=; y=b; z=a+c; if(z>C) { x=z-C; z=C; }
if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
// b->a
x=a+b; y=; z=c; if(x>A) { y=x-A; x=A; }
if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
// b->c
x=a; y=; z=b+c; if(z>C) { y=z-C; z=C; }
if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
// c->a
x=a+c; y=b; z=; if(x>A) { z=x-A; x=A; }
if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
// c->b
x=a; y=b+c; z=; if(y>B) { z=y-B; y=B; }
if(!p[x][y][z]) { p[x][y][z]=true; go(x,y,z); }
} int main()
{
ifstream in("milk3.in");
ofstream out("milk3.out"); in>>A>>B>>C; p[][][C]=true; go(,,C); bool can[]={};
int a=;
for(int b=;b<=B;++b)
for(int c=;c<=C;++c)
if(p[a][b][c]) can[c]=true; int c;
for(c=;c<=C;++c)
if(can[c]) { out<<c; break; }
for(++c;c<=C;++c)
if(can[c]) out<<" "<<c;
out<<endl; in.close();
out.close();
return ;
}

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. window下mycat要放在根目录下

    原理文档没有跟我开玩笑呢? 建议放在盘符根目录下 ,无视的我,检查了多遍jdk环境,检查了多遍bat文件内容,仍然没有解决 找不到或无法加载主类 直到我乖乖的把目录放跟盘符才解决,心好累= =! 可能 ...

  2. 设定网页最小最大宽度和高度(兼容IE6)

    http://www.cnblogs.com/double-bin/archive/2011/12/19/2293093.html /* 最小寬度 */ .min_width{min-width:30 ...

  3. 【HHHOJ】ZJOI2019模拟赛(十二)03.03 解题报告

    点此进入比赛 得分: \(0+77+20=97\) 排名: \(Rank\ 5\) \(Rating\):\(+46\) \(T1\):[HHHOJ178]依神(点此看题面) 这套题目中的唯一一道传统 ...

  4. VERITA Netbackup日常巡检详细说明

    VERITA备份日常监控 一. 相关检查方法.命令 1.1 启动NBU的图形管理界面: /usr/openv/netbackup/bin/jnbSA & 1.2字符界面命令: 1.2.1cat ...

  5. 7 MSSQL数据库备份与恢复

    0 MSSQL数据库备份 1 SQLAgent配置 2 设置连接属性 3 输入SA账号密码 4 SQL备份脚本配置 5 生成SQL全量备份脚本 6 生成SQL差异备份脚本 7 修改SQL差异备份脚本 ...

  6. 初始化mysql数据库时提示字符编码错误的解决办法

    有时候在安装完数据库并初始化的时候会出现如下错误: root@localhost mysql-5.5.19]# bash scripts/mysql_install_db --user=mysql - ...

  7. 2017.10.20 jsp用户登陆界面连接数据库

    用户登陆界面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...

  8. Spring Java配置

    Java配置 Java配置是Spring 4.x推荐的配置方式,可以完全替代xml配置:Java配置也是Sping Boot 推荐的配置方式.Java配置是通过@Configuration和@Bean ...

  9. Vuex基础-Mutation

    借助官网的一张图,更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.不可以直接对其进行赋值改变.需要注意的是,mutations只能做一些同步的操作. ​​​ 代码结构: ​ ...

  10. 使用筛法在 O(logN) 的时间内查询多组数的素数因子

    Prime Factorization using Sieve O(log n) for multiple queries 使用筛法在 O(logN) 的时间内查询多组数的素数因子 前言 通常, 我们 ...