BZOJ - 3963: [WF2011]MachineWorks
3963: [WF2011]MachineWorks
显然中途卖掉是不合算的,咱只考虑在有机器出售的那一天换一个机器的情况。
记$dp_i$为换成第$i$个机器时拥有的钱。为了方便处理,咱在$n+1$天放一个假机器。
$dp_i=\max\{dp_j+R_j+(D_i-D_j-1)G_j\}-P_i, \; dp_j + (D_i-D_j-1)G_j + R_j \geqslant P_i$
1.若对于$i$,$j$比$k$优。不妨设$G_j>G_k$,
$\frac{(dp_j+R_j+D_jG_j-G_j)-(dp_k+R_k+D_kG_k-G_k)}{G_j-G_k}>D_i$
2.如果$j$是$i$的一个决策,(略去P_i(话说可以这样吗?))
$dp_i=dp_j+R_j+D_jG_j-D_iG_j-G_j$
$dp_j+R_j+D_jG_j-G_j=D_iG_j+dp_i$
就成了一个$y=kx+b$的形式。其中$y$为$dp_j+R_j+D_jG_j-G_j$,$k$为$D_i$,$x$为$G_j$,$b$为$dp_i$。看起来是不是跟上面的很像。
所以我们要维护一个斜率单调递增的凸壳。
先把机器按照出售的天$D_i$排序。又发现$G_i$不单调,所以我们就用cdq分治来弄$G_i$。
分治的时候,咱想让凸壳里的每一个点都满足$dp_j+(D_i-D_j-1)G_j+R_j \geqslant P_i$,然后咱就不会了。
http://blog.csdn.net/clover_hxy/article/details/66475369
看看题解发现是咱的$dp$方程设计的${\color{Red} {naive}}$了。
记$dp_i$为$D_i$天卖掉机器的最大钱数。
$dp_i=\max\{dp_{i-1}, dp_j+(D_i-D_j+1)G_j-P_j+R_j(dp_j \geqslant P_j)\}$
1.若对于$i$,$j$比$k$优,
$\frac{(dp_j+R_j-P_j-D_jG_j-G_j)-(dp_k+R_k-P_k-D_kG_k-G_k)}{G_j-G_k}>-D_i(G_j>G_k)$
2.如果$j$是$i$的一个决策,
$dp_j+R_j-P_j-D_jG_j-G_j=-D_iG_j+dp_i$
跟上面$1$对应$y$是$dp_j+R_j-P_j-D_jG_j-G_j$,$k$是$-D_i$,$x$是$G_j$,$b$是$dp_i$。
这样就可以优化$dp$啦。
现在外面按$D_i$排序,分治时让左半边按$x_j$,即$G_j$排序,更新右半边的。
好气啊,居然是精度的问题。。。。我服了。。。