USACO 1.1.4<枚举>

来源:互联网 发布:淘宝账号花钱解封 编辑:程序博客网 时间:2024/05/02 04:28

the reason of failure:1、输出时,最后一行需要换行。

题意:

就是给3个桶,给出每个桶的容量大小,开始只有第三个桶有牛奶,问当第一个桶牛奶数为0时,第三个桶有多少牛奶,

直接枚举,2个for循环,从i倒到j,当且i不为0且j不满的时候,当第一个桶的牛奶为0的时候,记录下第三个桶的牛奶数量。

/*ID: mePROG: milk3LANG: C++*/#include <iostream>#include <queue>#include <string.h>#include <stdlib.h>#include <algorithm>#include <stdio.h>using namespace std;struct ttt{    int t[3];};ttt v;bool walked[500][500];int cc[500];int main(){    int c1=0;    queue<ttt>qq;    memset(walked,0,sizeof(walked));    freopen("milk3.in","r",stdin);    freopen("milk3.out","w",stdout);    int i,j,k,f1,f2,f3;    ttt t,u;    cin >> v.t[0] >> v.t[1]>> v.t[2];    t.t[0]=0;t.t[1]=0;t.t[2]=v.t[2];    qq.push(t);    while(!qq.empty()){        t=qq.front();qq.pop();      //  cout << t.t[0] <<"\t"<< t.t[1] <<"\t"<< t.t[2] << endl;        for(i=0;i<3;i++)            for(j=0;j<3;j++)            if(i!=j)        if(t.t[i]!=0&&t.t[j]!=v.t[j]){            int min1=min(v.t[j],t.t[i]+t.t[j]);            u=t;            u.t[j]=min1;            u.t[i]=t.t[i]+t.t[j]-min1;           if(walked[u.t[0]][u.t[1]]==0){               // cout << u.t[0] <<"\t"<< u.t[1] <<"\t"<< u.t[2] << endl;                if(u.t[0]==0)cc[c1++]=u.t[2];                walked[u.t[0]][u.t[1]]=1;                qq.push(u);           }        }    }    sort(cc,cc+c1);    for(i=0;i<c1;i++)        if(i!=c1-1)cout << cc[i] <<" ";        else            cout << cc[i] << endl;}


0 0
原创粉丝点击