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$排序,更新右半边的。

好气啊,居然是精度的问题。。。。我服了。。。

posted @ 2018-01-10 16:39  p0ny  阅读(143)  评论(0编辑  收藏  举报