zoukankan      html  css  js  c++  java
  • 母亲的牛奶(milk)

    母亲的牛奶(milk)

    题目描述

    农民约翰有三个容量分别是A、B、C升的桶,A、B、C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的。有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了。当然每一次灌注都是完全的,由于节约,牛奶不会丢失。写一个程序去帮助约翰找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

    输入

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

    输出

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

    样例输入

    8 9 10
    

    样例输出

    1 2 8 9 10

    分析:考虑所有情况即可,暴力转移;
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include <ext/rope>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define vi vector<int>
    #define pii pair<int,int>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    const int maxn=1e3+10;
    const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
    using namespace std;
    using namespace __gnu_cxx;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    int n,m,k;
    set<int>ans;
    struct node
    {
        int x,y,z;
        bool operator<(const node&r)const
        {
            if(x==r.x&&y==r.y)return z<r.z;
            else if(x==r.x)return y<r.y;
            else return x<r.x;
        }
     
    };
    map<node,int>p;
    void dfs(node u)
    {
        if(p[u]==1)return;
        p[u]=1;
        if(u.x==0)ans.insert(u.z);
        if(u.x<n)
        {
            if(u.y)
            {
                node v=u;
                v.x+=min(n-u.x,u.y);
                v.y-=min(n-u.x,u.y);
                dfs(v);
            }
            if(u.z)
            {
                node v=u;
                v.x+=min(n-u.x,u.z);
                v.z-=min(n-u.x,u.z);
                dfs(v);
            }
        }
        if(u.y<m)
        {
            if(u.x)
            {
                node v=u;
                v.y+=min(m-u.y,u.x);
                v.x-=min(m-u.y,u.x);
                dfs(v);
            }
            if(u.z)
            {
                node v=u;
                v.y+=min(m-u.y,u.z);
                v.z-=min(m-u.y,u.z);
                dfs(v);
            }
        }
        if(u.z<k)
        {
            if(u.x)
            {
                node v=u;
                v.z+=min(k-u.z,u.x);
                v.x-=min(k-u.z,u.x);
                dfs(v);
            }
            if(u.y)
            {
                node v=u;
                v.z+=min(k-u.z,u.y);
                v.y-=min(k-u.z,u.y);
                dfs(v);
            }
        }
    }
    int main()
    {
        int i,j,t;
        scanf("%d%d%d",&n,&m,&k);
        node q;
        q.x=0,q.y=0,q.z=k;
        dfs(q);
        printf("%d",*ans.begin());
        for(set<int>::iterator it=ans.begin();it!=ans.end();it++)
        {
            if(it==ans.begin())continue;
            else printf(" %d",*it);
        }
        printf("
    ");
        //system ("pause");
        return 0;
    }
     
  • 相关阅读:
    [bzoj5483][Usaco2018 Dec]Balance Beam_凸包_概率期望
    [bzoj3829][Poi2014]FarmCraft_树形dp
    [bzoj3420]Poi2013 Triumphal arch_树形dp_二分
    [bzoj4240]有趣的家庭菜园_树状数组
    [CF9D]How Many Trees?_动态规划_树形dp_ntt
    拖拽排序
    windows-build-tools
    阿里云七牛云oss获取视频内的帧图片
    转义符输入的转换
    node脚本下载geo数据
  • 原文地址:https://www.cnblogs.com/dyzll/p/5720239.html
Copyright © 2011-2022 走看看