倒牛奶

QAQ
思路:纯纯的暴力搜索,枚举6种情况。

#include <cstdio>
#include <iostream>
#include <algorithm> 
using namespace std;
int a,b,c;
int cnt;
int ans[999];
int f[99][99][99];//状态数组,记录情况有无搜过
void dfs(int ra,int rb,int rc)//分别是三个桶的牛奶数目
{

    if(f[ra][rb][rc]) return;//如果搜到这个情况了,返回吧
    if(ra==0) ans[++cnt]=rc;//如果a桶空了,记录答案。
    f[ra][rb][rc]=1;//标记这种情况搜过了
    int xa=a-ra;
    int xb=b-rb;
    int xc=c-rc;//分别是三个桶可以倒入牛奶的量
    if(ra>0&&rb<b)//a桶有奶且b桶可以倒入
    {
        if(ra<=xb) dfs(0,rb+ra,rc);//如果a桶的奶量小于等于b桶可以倒入的量,那就全倒入b中
        else       dfs(ra-xb,b,rc);//如果a桶的奶量大于b桶可以倒入的量,那就把b倒满,计算a桶倒完剩下的奶量
    }
    if(ra>0&&rc<c)
    {
        if(ra<=xc) dfs(0,rb,rc+ra);
        else       dfs(ra-xc,rb,c);
    }
    if(rb>0&&ra<a)
    {
        if(rb<=xa) dfs(ra+rb,0,rc);
        else       dfs(a,rb-xa,rc);
    }
    if(rb>0&&rc<c)
    {
        if(rb<=xc) dfs(ra,0,rc+rb);
        else       dfs(ra,rb-xc,c);
    }
    if(rc>0&&ra<a)
    {
        if(rc<=xa) dfs(ra+rc,rb,0);
        else       dfs(a,rb,rc-xa);
    }
    if(rc>0&&rb<b)
    {
        if(rc<=xb) dfs(ra,rb+rc,0);
        else       dfs(ra,b,rc-xb);
    }
}
int main()
{

    scanf("%d%d%d",&a,&b,&c);

    dfs(0,0,c);//开始只有c桶有奶且c桶满了啊23333

    sort(ans+1,ans+cnt+1);//升序输出

    for(int i=1;i<=cnt;i++)
     printf("%d ",ans[i]);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值