Mother’s Milk
2017.06.09
###题解###
每次操作有6种可能的倒法,进行深度优先搜索即可。
###代码###
/*
ID: xhzdcyy1
PROB: milk3
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#define cin fin
#define cout fout
using namespace std;
ofstream fout ("milk3.out");
ifstream fin ("milk3.in");
int size[3];
int a[3];
bool b[21];
bool v[21][21][21];
void pour(int x,int y){
if(a[x]==0||a[y]==size[y]) return;
if(a[x]<=(size[y]-a[y])){
a[y]+=a[x];
a[x]=0;;
return;
}
a[x]-=(size[y]-a[y]);
a[y]=size[y];
return;
}
void func(int n){
if(a[0]==0) b[a[2]]=true;
if(v[a[0]][a[1]][a[2]]) return;
v[a[0]][a[1]][a[2]]=true;
int t[3];
for(int i=0;i<3;i++) t[i]=a[i];
pour(0,1);
func(n+1);
for(int i=0;i<3;i++) a[i]=t[i];
pour(0,2);
func(n+1);
for(int i=0;i<3;i++) a[i]=t[i];
pour(1,0);
func(n+1);
for(int i=0;i<3;i++) a[i]=t[i];
pour(1,2);
func(n+1);
for(int i=0;i<3;i++) a[i]=t[i];
pour(2,0);
func(n+1);
for(int i=0;i<3;i++) a[i]=t[i];
pour(2,1);
func(n+1);
}
int main(){
for(int i=0;i<3;i++){
cin>>size[i];
}
for(int i=0;i<3;i++){
a[i]=0;
}
a[2]=size[2];
func(0);
bool flag=false;
for(int i=0;i<=20;i++){
if(b[i]){
if(flag) cout<<" ";
cout<<i;
flag=true;
}
}
cout<<endl;
return 0;
}