http://www.doc88.com/p-949564862405.html
http://codeforces.com/blog/entry/49691
我的理解 (不一定很对):
大概就是某个东西越多总贡献越大,要求刚好取n个时的最优解。可以把
DP
状态里记的取的个数这一维去掉,而设一个
cost
,取
k
个物品,总贡献要多减去cost*k,然后
设
f(x)=g(x)−cost∗x
。我们需要找到
cost
使
fmax=f(x0), x0=n
。要能用二分找
cost
,必须
f(x)
是单峰,否则,
f′(x)=g′(x)−cost
,
cost→x0
就不是个正常的递减函数。若
f(x)
是单峰,则
g(x)
斜率必须是递减的。
注意到
g(x)
斜率可以是有相同的,虽然这样一个
cost
可能对应多个
x0
。这其实是没有问题的:
f(x)
有连续一段都是最大值,也就是说二分到最后可能并没有停在
n
, 但答案还是能求的,反正值都一样,当做停在
WQS二分——学习笔记
最新推荐文章于 2024-01-24 21:07:58 发布