(贪心)背包问题

这篇博客探讨了贪心算法在解决背包问题中的应用,包括最优装载问题、部分背包问题和乘船问题。在最优装载问题中,通过按重量从小到大排序选取物体来确保最大数量的物体。部分背包问题引入了价值概念,优先选择单位重量价值最高的物体。乘船问题中,贪心策略是让最轻的人与最重的合法伙伴一起乘坐,确保最小的船只数量。所有这些问题都证明了贪心法在这些场景下能找到最优解。

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

1.最优装载问题。

给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不 超过C。

由于只关心物体的数量,所以装重的没有装轻的划算。只需把所有物体按重量从小到大 排序,依次选择每个物体,直到装不下为止

2.部分背包问题。

有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情 况下让总价值尽量高。每一个物体都可以只取走一部分,价值和重量按比例计算。

本题在上一题的基础上增加了价值,所以不能简单地像上题那样先拿轻的(轻的可能价 值也小),也不能先拿价值大的(可能它特别重),而应该综合考虑两个因素。一种直观的 贪心策略是:优先拿“价值除以重量的值”最大的,直到重量和正好为C。
注意:由于每个物体可以只拿一部分,因此一定可以让总重量恰好为C(或者全部拿走 重量也不足C),而且除了最后一个以外,所有的物体要么不拿,要么拿走全部。

3.乘船问题。

有n个人,第i个人重量为wi。每艘船的最大载重量均为C,且最多只能乘两 个人。用最少的船装载所有人。

考虑最轻的人i,他应该和谁一起坐呢?如果每个人都无法和他一起坐船,则唯一的方 案就是每人坐一艘船。否则,他应该选择能和他一起坐船的人中最重的 一个j。这样的方法是贪心的,因此它只是让“眼前”的浪费最少。可以用反证法说明。

情况1:i不和任何一个人坐同一艘船,那么可以把j拉过来和他一起坐,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天学点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值