母亲的牛奶—DFS—蓝桥杯

母亲的牛奶

题目描述
有三个容量分别为 A,B,C 升的挤奶桶。最开始桶 A 和桶 B 都是空的,桶 C 里装满了牛奶。
约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。
这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。
请你编写一个程序判断,当 A 桶是空的时候,C 桶中可能包含多少升牛奶,找出所有的可能情况。

输入格式
共一行,包含三个整数 A,B,C。

输出格式
共一行,包含若干个整数,表示 C 桶中牛奶存量的所有可能情况,请将这些数字按升序排列。

va, vb, vc = map(int, input().split())
vis = [[[0] * 25 for _ in range(25)] for _ in range(25)]
# 用vis记录遍历情况,通过穷举每个桶倒入其它桶情况,得到A为0的情况中C的情况

def dfs(a, b, c):
    if vis[a][b][c] != 0: return
    vis[a][b][c] = 1  # 表示这种情况找到过
    # a -> b,只有倒满和倒空两种情况
    if vb - b > a: dfs(0, b + a, c)  # a倒空
    if vb - b <= a: dfs(a - (vb - b), vb, c)  # b倒满

    # a -> c,同理
    if vc - c > a: dfs(0, b, c + a)  # a空
    if vc - c <= a: dfs(a - (vc - c), b, vc)  # c满

    # b->c
    if vc - c > b:  # b空
        dfs(a, 0, c + b)
    else:  # c满
        dfs(a, b - (vc - c), vc)

    # b-> a
    if va - a > b:
        dfs(a + b, 0, c)
    else:
        dfs(va, b - (va - a), c)

    # c->a
    if va - a > c:
        dfs(a + c, b, 0)
    else:
        dfs(va, b, c - (va - a))

    # c->b
    if vb - b > c: dfs(a, b + c, 0);
    if vb - b <= c: dfs(a, vb, c - (vb - b))


dfs(0, 0, vc)  # 初始情况
for i in range(vc + 1):
    for j in range(vb + 1):
        if vis[0][j][i]:  # A空
            print(i, end=' ')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值