WQS二分——学习笔记

http://www.doc88.com/p-949564862405.html
http://codeforces.com/blog/entry/49691
我的理解 (不一定很对):
大概就是某个东西越多总贡献越大,要求刚好取n个时的最优解。可以把 DP 状态里记的取的个数这一维去掉,而设一个 cost ,取 k 个物品,总贡献要多减去cost*k,然后 DP cost 越大,物品数取越少。 二分 cost 使得 DP 得到的答案刚好取了 n 个物品。
g(x) 表示取 x 个时的总贡献。必须满足 g(x) 斜率不增才能WQS二分。
f(x)=g(x)costx 。我们需要找到 cost 使 fmax=f(x0), x0=n 。要能用二分找 cost ,必须 f(x) 是单峰,否则, f(x)=g(x)cost costx0 就不是个正常的递减函数。若 f(x) 是单峰,则 g(x) 斜率必须是递减的。
注意到 g(x) 斜率可以是有相同的,虽然这样一个 cost 可能对应多个 x0 。这其实是没有问题的:
f(x) 有连续一段都是最大值,也就是说二分到最后可能并没有停在 n , 但答案还是能求的,反正值都一样,当做停在 n 就行了,最后输出的答案还是补回 ncost ,而不能是最后的 midcost

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值