Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ID: hasanma1
- TASK: milk3
- LANG: C++
- */
- #include<bits/stdc++.h>
- using namespace std;
- int state[21][21][21];
- typedef struct
- {
- int capacity;
- int milk;
- } buk;
- buk b[3];
- bool solve(int f, int t)
- {
- if(f == t || b[f].milk == 0 || b[t].capacity == b[t].milk) return false;
- int tm = b[t].capacity - b[t].milk;
- if(b[f].milk > tm) // t bucket can be filled
- {
- b[f].milk -= tm;
- b[t].milk = b[t].capacity;
- }
- else // f bucket is empty
- {
- b[t].milk += b[f].milk;
- b[f].milk = 0;
- }
- return true;
- }
- int dfs(int x, int y, int z)
- {
- if(state[x][y][z]) return 0;
- state[x][y][z] = 1;
- int p,q,r;
- for(int i = 0; i < 3; i++)
- {
- for(int j = 0; j < 3; j++)
- {
- p = b[0].milk;
- q = b[1].milk;
- r = b[2].milk;
- if(solve(i,j))
- {
- dfs(b[0].milk, b[1].milk, b[2].milk);
- }
- // back to the original state
- b[0].milk = p;
- b[1].milk = q;
- b[2].milk = r;
- }
- }
- return 0;
- }
- int main()
- {
- freopen("milk3.in", "r", stdin);
- freopen("milk3.out", "w", stdout);
- for(int i = 0; i < 3; i++)
- {
- cin >> b[i].capacity;
- b[i].milk = 0;
- }
- int tot = b[2].capacity;
- b[2].milk = tot; // c bucket is full
- int lis[21];
- memset(lis, 0, sizeof(lis));
- memset(state, 0, sizeof(state));
- dfs(0,0,tot);
- for(int i = 0; i <= tot; i++)
- {
- for(int j = 0; j <= tot; j++)
- {
- if(state[0][i][j])
- {
- lis[j] = 1;
- }
- }
- }
- for(int i = 0; i < tot; i++)
- {
- if(lis[i])
- cout << i << " ";
- }
- cout << tot << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement