三个桶装牛奶,枚举所有可能获取的数量,使用回溯做 #include<iostream> #include<fstream> #include<string> #include<memory.h> #include<cstdio> #include<queue> #include<vector> #include<algorithm> using namespace std; int a[3]; int b[3]; int res[10001]; int ri; bool used[21][21][21]; void dfs(int * t){ used[t[0]][t[1]][t[2]]=true; if(t[0]==0){ res[ri++]=t[2]; } int t1,t2; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ if(i==j) continue; if(t[i]>0){ t1=t[i];t2=t[j]; if(t[i]>a[j]-t[j]){ t[i]=t1+t2-a[j]; t[j]=a[j]; if(!used[t[0]][t[1]][t[2]]) dfs(t); t[i]=t1;t[j]=t2; } else{ t[j]=t1+t2; t[i]=0; if(!used[t[0]][t[1]][t[2]]) dfs(t); t[i]=t1;t[j]=t2; } } } } } int main(){ ifstream fin("milk3.in"); ofstream fout("milk3.out"); fin>>a[0]>>a[1]>>a[2]; b[0]=0;b[1]=0;b[2]=a[2]; memset(used,false,sizeof(used)); ri=0; dfs(b); sort(res,res+ri); for(int i=0;i<ri;i++) { if(i!=0) fout<<" "; fout<<res[i]; } fout<<endl; return 0; }