【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 104852
  • 排名 - 233

最新评论

阅读排行榜

评论排行榜

农民有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的。有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的。由于节约,牛奶不会有丢失。

写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。


INPUT FORMAT:

(file milk3.in)

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

OUTPUT FORMAT:

(file milk3.out)

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


input:
8 9 10

output:
1 2 8 9 10

【参考程序】:
/*
ID: XIONGNA1
PROG: milk3
LANG: C++
*/
#include
<iostream>
#include
<cstring>
using namespace std;
bool hash[21][21][21];
int size[4],x,y;
void into(int k)
{
    
if (x+y>=size[k])//装满
    {
        x
-=size[k]-y; y=size[k];
    }
    
else//倒尽
    {
        y
+=x; x=0;
    }
}
void dfs(int a,int b,int c)
{
    
if (hash[a][b][c]) return ;
    hash[a][b][c]
=true;
    
//a-->b
    x=a;y=b;
    into(
2);dfs(x,y,c);
    
//a-->c
    x=a;y=c;
    into(
3);dfs(x,b,y);
    
//b-->a
    x=b;y=a;
    into(
1);dfs(y,x,c);
    
//b-->c
    x=b;y=c;
    into(
3);dfs(a,x,y);
    
//c-->a
    x=c;y=a;
    into(
1);dfs(y,b,x);
    
//c-->b
    x=c;y=b;
    into(
2);dfs(a,y,x);
}
void print_path()
{
    
bool bk=true;
    
for (int i=0;i<=size[3];i++)
        
for (int j=0;j<=size[2];j++)
            
if (hash[0][j][i])
            {
                
if (bk) {printf("%d",i);bk=false;}
                
else printf(" %d",i);
            }
    printf(
"\n");
}
int main()
{
    freopen(
"milk3.in","r",stdin);
    freopen(
"milk3.out","w",stdout);
    scanf(
"%d%d%d",&size[1],&size[2],&size[3]);
    memset(hash,
false,sizeof(hash));
    dfs(
0,0,size[3]);
    print_path();
    
return 0;
}
posted on 2009-07-16 11:20 开拓者 阅读(306) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理