这题有一个非常水的贪心做法……
但是显然斜率优化更优美!
暴力的方程 fi=max0≤j<i(fj+(i−j)ai)。
对于决策 0≤k<j<i,假设 j 优于 k。
有 fj+(i−j)ai≥fk+(i−k)aifj−j⋅ai≥fk−k⋅aifj−fk≥(j−k)aifj−fkj−k≥ai
但是我们发现 ai 并没有单调性……所以不能直接单调队列,因为可能会排除掉对将来有用的决策……
考虑换成单调栈,找决策的时候二分即可。
代码:
1 |
|
这题有一个非常水的贪心做法……
但是显然斜率优化更优美!
暴力的方程 fi=max0≤j<i(fj+(i−j)ai)。
对于决策 0≤k<j<i,假设 j 优于 k。
有 fj+(i−j)ai≥fk+(i−k)aifj−j⋅ai≥fk−k⋅aifj−fk≥(j−k)aifj−fkj−k≥ai
但是我们发现 ai 并没有单调性……所以不能直接单调队列,因为可能会排除掉对将来有用的决策……
考虑换成单调栈,找决策的时候二分即可。
代码:
1 | #include <cstdio> |
Related Issues not found
Please contact @Alpha1022 to initialize the comment