USACO Section 1.4 Mother's Milk - 输出错了好几次..

本文介绍了一个使用三维数组判重的算法,解决经典的倒牛奶问题。通过递归搜索所有可能的状态转移,找到从一个容器向另外两个容器倒牛奶直至其中一个容器为空的所有可能剩余量,并进行排序输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

就是不断搜索倒牛奶的过程..用一个三维数组来判重就可以了....

恶心的输入或者是我不适应~~末尾多了空格报错...每个文件只有一组数据...输出一行后还必须打个\n....呃...

Program:

/* ID: zzyzzy12 LANG: C++ TASK: milk3 */ #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> using namespace std; int ans[201],num,A,B,C; bool f[21][21][21]; void search(int a,int b,int c) { if (f[a][b][c]) return; f[a][b][c]=true; if (!a) { num++; ans[num]=c; } if (a+b>B) search(a-B+b,B,c); else search(0,a+b,c); if (a+c>C) search(a-C+c,b,C); else search(0,b,a+c); if (b+a>A) search(A,b-A+a,c); else search(b+a,0,c); if (b+c>C) search(a,b-C+c,C); else search(a,0,c+b); if (c+a>A) search(A,b,c-A+a); else search(a+c,b,0); if (c+b>B) search(a,B,c-B+b); else search(a,c+b,0); } int main() { freopen("milk3.in","r",stdin); freopen("milk3.out","w",stdout); memset(f,false,sizeof(f)); num=0; scanf("%d%d%d",&A,&B,&C); search(0,0,C); sort(ans+1,ans+1+num); for (int i=1;i<num;i++) printf("%d ",ans[i]); printf("%d\n",ans[num]); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值