Mother's Milk

 

Mother's Milk

 

母亲的牛奶

 

译 by 某人(反正不是我)

 

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

 

PROGRAM NAME: milk3

 

INPUT FORMAT

 

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

 

SAMPLE INPUT (file milk3.in)

 

8 9 10

 

OUTPUT FORMAT

 

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

 

SAMPLE OUTPUT (file milk3.out)

 

1 2 8 9 10

 

SAMPLE INPUT (file milk3.in)

 

2 5 10

 

SAMPLE OUTPUT (file milk3.out)

 

5 6 7 8 9 10

 

 

 

本题中,

三个桶,因此就是6种:A->B A->C B->A B->C C->A C->B。所有转移都考虑一遍即可。

以A->B来说,这样转移之后状态是什么呢?A的

牛奶数应该是max(0, a+b-B),其中a,b是A和B桶中原来牛奶的数量,A,B是A和B桶的容量。B的牛奶数是

min(a+b, B),其他的以此类推。本题就差不多了。~

代码:

 

/*
ID:Andy Chen
PROG: milk3
LANG: C++
*/
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdlib>
#include <climits>
#include<vector>
#include<fstream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 100010;
const ll MOD = 1000000007;
const int INF = 0x7fffffff;

bool state[21][21];
bool record[21] = {false};
vector<int> ans;
int a, b, c;

void dfs(int x, int y){
    
    int c1 = c - x - y; 
    if(state[x][y]) return;
    if( !record[c1] && c1 >= c-b) ans.push_back(c1);
    record[c1] = true;
    state[x][y] = true;
    // a -> b
    int b1 = min(b , x + y);
    int a1 = x + y - b1;
    dfs(a1, b1);
    // b -> a
    a1 = min(a, x + y);
    b1 = x + y - a1;
    dfs(a1, b1);
    // a -> c
    a1 = 0;     // total milk = c
    b1 = y;
    dfs(a1, b1);
    // c -> a
    a1 = min(a, x + c1);
    b1 = y;
    dfs(a1, b1);
    // b -> c
    a1 = x;
    b1 = 0;
    dfs(a1, b1);
    // c -> b
    a1 = x;
    b1 = min(b, y + c1);
    dfs(a1, b1);
}

int main()
{
    ifstream fin("milk3.in");
    ofstream fout("milk3.out");

    fin >> a >> b >> c;
    dfs(0, 0);
    sort(ans.begin(), ans.end());
    for(int i = 0; i <= ans.size()-2; i++){
        fout << ans[i] << " ";
    }
    fout << ans[ans.size()-1] << endl;
    return 0;
}

 

你可能感兴趣的:(Mother's Milk)