博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ - 3963: [WF2011]MachineWorks
阅读量:6831 次
发布时间:2019-06-26

本文共 1102 字,大约阅读时间需要 3 分钟。

显然中途卖掉是不合算的,咱只考虑在有机器出售的那一天换一个机器的情况。

记$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$,然后咱就不会了。

看看题解发现是咱的$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$排序,更新右半边的。

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

转载于:https://www.cnblogs.com/p0ny/p/8258754.html

你可能感兴趣的文章
Angularjs1.x 项目结构
查看>>
执行Android项目时指定特定的AVD进行測试
查看>>
MFC窗口去边框、置顶、全屏、激活
查看>>
Perl 杂记
查看>>
列表的LIFO与文件交互
查看>>
nodeJS 中关于 promise 的使用
查看>>
jQuery内容过滤选择器再探究(原创)
查看>>
OpenCV——级联分类器(CascadeClassifier)
查看>>
Ajax 访问 或 获取 IIS 虚拟目录
查看>>
Palindrome POJ 1159 动态规划
查看>>
lua的C库
查看>>
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
Lync Server 2010的部署系列(四) outlook无法加入联机会议
查看>>
Windows Server 2012安装SQL 2012
查看>>
MS UC 2013-0-虚拟机-标准化-部署-2-模板机-制作-5
查看>>
最常用的四种数据分析方法
查看>>
c++学习笔记:类的若干基础问题
查看>>
ubuntu更改sso文件策略
查看>>
业务开发测试HBase之旅三:通过Java Api与HBase交互
查看>>
JS父页面获取子页面返回值
查看>>