母亲的牛奶
题目描述
农民约翰有三个容量分别是
写一个程序去帮助农民找出当
输入输出格式
输入格式:
单独的一行包括三个整数
输出格式:
只有一行,升序地列出当
输入输出样例
输入样例1 :
8 9 10
输出样例1 :
1 2 8 9 10
输入样例2 :
2 5 10
输出样例2 :
5 6 7 8 9 10
这是一道搜索类型题,只需搜索各种情况即可,可以深搜或广搜
深搜代码如下:
#include<cstdio>
bool pj[23],bj[23][23][23];
int a,b,c;
void dfs(int aa,int bb,int cc) {
if(!bj[aa][bb][cc]) {//记忆化
if(!aa) {
pj[cc]=1;//记录符合条件情况
}
bj[aa][bb][cc]=1;
if(b-bb<=aa) {//a向b倒牛奶,b可以被倒满
dfs(aa-b+bb,b,cc);
} else {//a向b倒牛奶,b不可以被倒满
dfs(0,bb+aa,cc);
}
if(c-cc<=aa) {//a向c倒牛奶,c可以被倒满
dfs(cc+aa-c,bb,c);
} else {//a向c倒牛奶,c不可以被倒满
dfs(0,bb,cc+aa);
}
if(c-cc<=bb) {//b向c倒牛奶,c可以被倒满
dfs(aa,bb-c+cc,c);
} else {//b向c倒牛奶,c不可以被倒满
dfs(aa,0,cc+bb);
}
if(a-aa<=bb) {//b向a倒牛奶,a可以被倒满
dfs(a,bb-a+aa,cc);
} else {//b向a倒牛奶,a不可以被倒满
dfs(aa+bb,0,cc);
}
if(a-aa<=cc) {//c向a倒牛奶,a可以被倒满
dfs(a,bb,cc-a+aa);
} else {//c向a倒牛奶,a不可以被倒满
dfs(cc+aa,bb,0);
}
if(b-bb<=cc) {//c向b倒牛奶,b可以被倒满
dfs(aa,b,cc-b+bb);
} else {//c向b倒牛奶,b不可以被倒满
dfs(aa,cc+bb,0);
}
}
return;
}
int main() {
scanf("%d%d%d",&a,&b,&c);//记录各桶容积
dfs(0,0,c);//从初始情况开始搜索
for(int i=0; i<=c; i++) {
if(pj[i]) {
printf("%d",i);
putchar(' ');
}
}
return 0;
}