zoukankan      html  css  js  c++  java
  • 随手练——USACO 1.44 母亲的牛奶

    P1215 [USACO1.4]母亲的牛奶 Mother's Milk


    洛谷 P1215:https://www.luogu.org/problemnew/show/P1215

     

    解题思想:DFS

    大一校内编程比赛的题目了,当时毛都没看懂,现在再拿出来,不能说小意思吧,那样说好像太狂了,中等意思吧

    一个杯子往另一个杯子里倒,分两种情况。

    假设A杯,B杯(大小关系是不影响的,反过来一样):

    需要注意的就是,添加一个flag数组,标记已经做过的状态。

    #include <iostream>
    #include <set>
    using namespace std;
    
    set<int>s;
    bool flag[21][21][21];
    int A, B, C;
    
    int min(int a,int b) {
        return a < b ? a : b;
    }
    void DFS(int a,int b,int c) {
        
        if (flag[a][b][c])return;
        else
            flag[a][b][c] = true;
    
        if (a > A || b > B || c > C) {
            return;
        }
        
        if (a == 0) {
            s.insert(c);
        }
                
        if (a > 0) {
            //a->b
            DFS(a - min(B - b, a), b + min(B - b, a), c);
            //a->c
            DFS(a - min(C - c, a), b, c + min(C - c, a));
        }
        if (b > 0) {
            //b->a
            DFS(a + min(b, A - a), b - min(b, A - a), c);
            //b->c
            (a, b - min(b, C - c), c + min(C - c, b));
        }        
        if (c > 0) {
            //c->a
            DFS(a + min(A - a, c), b, c - min(A - a, c));
            //c->b
            DFS(a, b + min(B - b, c), c - min(c, B - b));
        }
    }
    
    int main() {
        int i = 0;
         cin >> A >> B >> C;
        DFS(0, 0, C);
        set<int>::iterator it = s.begin();
        while (it != s.end()) {
            if ((i++) == s.size() - 1)break;
            cout << *it << " ";
            it++;
        }
        cout << *it << endl;
        return 0;
    }
  • 相关阅读:
    java学习day62-Spring boot整合Shiro配置
    java学习day62-springboot中的拦截
    java学习day62-DB项目-首页菜单动态显示
    疯狂学java的第26天
    疯狂学java的第25天
    疯狂学java的第24天
    疯狂学java的第23天
    疯狂学java的第22天
    疯狂学java的第21天
    疯狂学java的第20天
  • 原文地址:https://www.cnblogs.com/czc1999/p/10357619.html
Copyright © 2011-2022 走看看