您的位置:首页 > 其它

USACO-Mother's Milk

2013-04-26 19:53 232 查看
http://ace.delos.com/usacoprob2?a=SZbyXoKqpyP&S=milk3
一题比较简单的搜索题。nocow上列出3种解法:http://www.nocow.cn/index.php/USACO/milk3
就我的感觉吧,方法一最简单而且最靠谱,而我的程序长得好像和方法一最像了= =
因为倒法只有6种(a倒b,a倒c,b倒a,b倒c,c倒a,c倒b),而且当且仅当倒出桶有牛奶才可以倒出。而倒出多少牛奶适合呢?这就关系到倒出桶的牛奶总量和倒入桶可承受的牛奶量了。具体的看程序。
#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;

bool f[100]={false};
bool ff[22][22][22]={false};
int aa,bb,cc;

void work(int a,int b,int c)
{
if (ff[a][b][c]) return;         //三维数组判重,不过听说二维也可以
ff[a][b][c]=true;
if (a==0) f[c]=true;
if (a!=0)
{
work(a-min(bb-b,a),b+min(bb-b,a),c);   //a->b
work(a-min(cc-c,a),b,c+min(cc-c,a));   //a->c
}
if (b!=0)
{
work(a+min(aa-a,b),b-min(aa-a,b),c);   //b->a
work(a,b-min(cc-c,b),c+min(cc-c,b));    //b->c
}
if (c!=0)
{
work(a+min(aa-a,c),b,c-min(aa-a,c));   //c->a
work(a,b+min(bb-b,c),c-min(bb-b,c));   //c->b
}
}

int main()
{
freopen("milk3.in","r",stdin);
freopen("milk3.out","w",stdout);
cin>>aa>>bb>>cc;
work(0,0,cc);
for (int i=0;i<cc;i++)
if (f[i]) cout<<i<<" ";
cout<<cc<<endl;
return 0;
}






第一次拿到first time!值得庆祝!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: