超大背包问题

博客介绍了折半搜索算法,其本质是状压思想。先枚举前一半情况并保存,排序保障总质量与价值关系,运用贪心思想;再枚举后半部分,通过二分搜索找到总质量和不大于w的最大价值。最后还提及了lower_bound函数的比较规则。

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

运用二进制,折半搜索,其实我觉得本质就是状压思想,,,
枚举前一半所有情况并保存。
然后排序保障总质量越大,价值越大。
这里相当于贪心。
可以证明的,如果在一堆一一对应的数里面,只取一个,另外一个数越大才越有可能是最优解。
这个思想大概只能用在只取一个上面。
再枚举后半部分。
算出每一种枚举方式的总质量,w-wi就是他在前一半的质量,二分搜索一下,就能找到总质量和不大于w的最大价值了。
emmmm最后说一下lower_bound函数,大多数用的都是

ll tv=(lower_bound(ps,ps+m,make_pair(wi,inf)-1)->second;

返回迭代器,指针指向second。
所以lowerbound在比较pair的时候,大概是先比较first,再来second把。所以才要赋值成inf,方便无论first相不相等,都要减一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值