zoukankan      html  css  js  c++  java
  • USACO 1.4-Mother's Milk

    /*
    ID: m1590291
    TASK: milk3
    LANG: C++
    */
    #include <iostream>
    #include <fstream>
    #include <string.h>
    #define MAX 25
    int A,B,C;
    int ans[MAX];       //涂灰的标志数组
    int vis[MAX][MAX][MAX];     //dfs的执行数组
    /******************************************************************************************************************
                   思路:
                   1,找出倒牛奶的6种状态,再深搜就OK
                   2,6种状态分别是    c->a  ||  c->b;
                                        b->a  ||  b->c;
                                        a->b  ||  a->c;
                   3,每种状态对应两种情况,能倒满和倒不满
                   4,深搜的实质,将白色图案涂灰的过程   {找到 (return 条件)和(涂灰条件)是关键}
    ******************************************************************************************************************/
    using namespace std;
    
    void dfs(int a,int b,int c)
    {
        if(vis[a][b][c])    return ;
        vis[a][b][c]=1;
        if(a == 0 && !ans[c])       //涂灰条件
            ans[c]=1;
        if(c >= A-a) dfs(A,b,c-A+a);        //c->a
        else
            dfs(a+c,b,0);
        if(c >= B-b) dfs(a,B,c-B+b);        //c->b
        else
            dfs(a,b+c,0);
        if(b >= A-a) dfs(A,b-A+a,c);        //b->a
        else
            dfs(a+b,0,c);
        if(b >= C-c) dfs(a,b-C+c,C);        //b->c
        else
            dfs(a,0,c+b);
        if(a >= B-b) dfs(a-B+b,B,c);        //a->b
        else
            dfs(0,b+a,c);
        if(a >= C-c) dfs(a-C+c,b,C);        //a->c
        else
            dfs(0,b,c+a);
    }
    int main()
    {
        ifstream fin("milk3.in");
        ofstream fout("milk3.out");
    
        while(fin>>A>>B>>C)
        {
            int flag=1;
            memset(vis,0,sizeof(vis));
            memset(ans,0,sizeof(ans));
    
            dfs(0,0,C);
            for(int i = 0;i <= 20;i ++){
                if(ans[i]){
                    if(flag){
                        fout<<i;
                        flag=0;
                    }
                    else
                        fout<<" "<<i;
                }
            }
            fout<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    Java 代理模式
    ReentrantLock 详解
    Java线程池详解
    ConcurrentHashMap 解读
    CountDownLatch/CyclicBarrie用法记录
    微信接入笔记记录
    iOS设计模式
    iOS设计模式
    iOS设计模式
    iOS设计模式
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6352031.html
Copyright © 2011-2022 走看看