题目描述 https://www.luogu.org/problemnew/show/P1215
方法很多,主要是找全。
搜素,哪个有牛奶就倒哪个,注意重复,最后排序输出。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a,b,c,cnt,ans[2005],fl[25][25][25];
void dfs(int na,int nb,int nc)
{
if(fl[na][nb][nc]) return;
if(na==0) ans[++cnt]=nc;
fl[na][nb][nc]=1;
if(nc)
{
if(na<a) dfs(min(na+nc,a),nb,nc-(min(na+nc,a)-na));
if(nb<b) dfs(na,min(nb+nc,b),nc-(min(nb+nc,b)-nb));
}
if(nb)
{
if(na<a) dfs(min(na+nb,a),nb-(min(na+nb,a)-na),nc);
if(nc<c) dfs(na,nb-(min(nb+nc,c)-nc),min(nb+nc,c));
}
if(na)
{
if(nb<b) dfs(na-(min(na+nb,b)-nb),min(na+nb,b),nc);
if(nc<c) dfs(na-(min(na+nc,c)-nc),nb,min(na+nc,c));
}
}
int main()
{
scanf("%d%d%d",&a,&b,&c);
dfs(0,0,c);
sort(ans+1,ans+cnt+1);
for(int i=1;i<=cnt;i++) printf("%d ",ans[i]);
return 0;
}