uva10280(完全背包+剪枝)

博客介绍了如何解决UVA10280问题,利用完全背包策略结合剪枝技术,将瓶子容量分解并计算最小剩余酒量。通过分析瓶子容量范围和峰值,确定何时可以跳过不必要的计算,从而优化算法避免超时。
摘要由CSDN通过智能技术生成

题意:

有n升的酒(n*1000毫升);然后有m种瓶子,每种瓶子有最小装酒量,和最大装酒量(单位:毫升),瓶子数量不限.

问最少剩下多少酒不能装进去.


思路:

我们可以把酒瓶子分解,比如瓶子容量725 - 750;

我们就把它变成容量为725 到 750的26个瓶子.然后用完全背包做.

但是酒的量太大,直接做会超时,所以我们要剪枝.

我们可以想象,如果我们用10 - 15的瓶子装酒

那么一瓶可以装的范围是10 - 15

两瓶是20 - 30

三瓶是30 - 45

四瓶是40 - 60

我们可以发现,从第三瓶开始,范围已经交叠了.也就是30以上的酒,我们可以全部装进去.(我们把这个值称作这个瓶子的峰值把,就如果大于峰值,那么就可以用这个瓶子全部装完ÿ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值