超大背包问题

运用二进制,折半搜索,其实我觉得本质就是状压思想,,,
枚举前一半所有情况并保存。
然后排序保障总质量越大,价值越大。
这里相当于贪心。
可以证明的,如果在一堆一一对应的数里面,只取一个,另外一个数越大才越有可能是最优解。
这个思想大概只能用在只取一个上面。
再枚举后半部分。
算出每一种枚举方式的总质量,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相不相等,都要减一。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值