zoukankan      html  css  js  c++  java
  • USACO / Mother's Milk (DFS)

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

    描述

    写一个程序去帮助农民找出当A桶是空的时候,C桶中牛奶所剩量的所有可能性。

    格式

    PROGRAM NAME: milk3

    INPUT FORMAT:

    (file milk3.in)

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

    OUTPUT FORMAT:

    (file milk3.out)

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

    SAMPLE INPUT 1

    8 9 10
    

    SAMPLE OUTPUT 1

    1 2 8 9 10 
    

    SAMPLE INPUT 2

    2 5 10 
    

    SAMPLE OUTPUT 2

    5 6 7 8 9 10

    分析

    Way :DFS 因为牛奶的总量是不变的,所以可以用a,b中的牛奶量做状态,初始状态是(0,0),每次只能有6种选择,a倒b,a倒c,b倒a,b倒c,c倒a,c倒b。用一个数组vis[i][j]判重,s[i]记录c中所有可能值(s[i]=true表示c中可能出现i),如果当前状态是(0,x),那么s[mc -x]=true,最后输出s中所有true的就可以了。

     

    CODE:

    /*
    ID: 138_3531
    LANG: C++
    TASK: milk3
    */
    
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    ifstream fin("milk3.in");
    ofstream fout("milk3.out");
    int a, b, c, tf[21][21] = {0};
    
    
    void dfs(int i, int k) {
        if (tf[i][k])return;
        tf[i][k] = 1;
        dfs(0, k);
        dfs(i, 0);
        if (i >= b - k)dfs(i - b + k, b);
        else dfs(0, i + k);
        if (k >= a - i)dfs(a, k - a + i);
        else dfs(i + k, 0);
        int j = c - i - k;
        if (j >= a - i)dfs(a, k);
        else dfs(i + j, k);
        if (j >= b - k)dfs(i, b);
        else dfs(i, k + j);
    }
    
    
    int main() {
        fin >> a >> b >> c;
        dfs(0, 0);
        for (int i = 20, ge = 0; i >= 0; i--)
            if (tf[0][i]) {
                if (ge)fout << ' ';
                else ge = 1;
                fout << c - i;
            }
        fout << endl;
    }

     

    
    
    举杯独醉,饮罢飞雪,茫然又一年岁。 ------AbandonZHANG
  • 相关阅读:
    嵌入式驱动开发之sensor---sensor 图形传感器调试
    时下世界上最先进的液晶面板技术---ips
    多媒体开发之rtp 打包发流---udp 丢包问题
    多媒体开发之rtp 打包发流---同网段其他机子sdp 播放不了
    AutoCAD LoadLibrary Failed with error 126 Message
    OpenCV获取与设置像素点的值的几个方法
    四元数与旋转
    圆点博士小四轴主程序状态机结构
    四元数(Quaternion)和旋转 +欧拉角
    PID控制算法
  • 原文地址:https://www.cnblogs.com/AbandonZHANG/p/2598415.html
Copyright © 2011-2022 走看看