玩具装箱

  P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。P教授有编号为1...N的N件玩具,第i件玩具经过压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。同时如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,形式地说如果将第i件玩具到第j个玩具放到一个容器中,那么容器的长度将为 x=j-i+1+Sigma(Ck) i<=K<=j 制作容器的费用与容器的长度有关,根据教授研究,如果容器长度为x,其制作费用为(X-L)^2.其中L是一个常量。P教授不关心容器的数目,他可以制作出任意长度的容器,甚至超过L。但他希望费用最小。

  首先普通dp得方程\(dp[i]=min(dp_j+(i-j-1+a_i-a_j-l)^2)\),发现有\(a_i*a_j\)的项,于是考虑斜率优化。为了简化方程,用斜率优化的套路,把只与同一下标相关的项统一起来。令\(b_i=a_i+i\),\(d_i=b_i-l-1\),那么\(dp[i]=min(dp[j]+(d_i-b_j)^2)\)。若j优于k,说明\(dp[j]-dp[k]+b_j^2-b_k^2<2d_ib_i-2d_ib_k\),再简化运算,令\(x_i=2b_i\),\(y_i=dp[i]+b_i^2\),那么知道若j优于k,\(\frac{y_j-y_k}{x_j-x_k}<d_i\),也就是可以用斜率优化,单调队列维护下凸包做。

  注意此题不存在\(c_i\)等于0,所以可以直接算斜率,不用再乘开计算。这个和hdu那道入门题不同。

#include <cstdio>
using namespace std;
typedef long long LL; const LL maxn=5e5+5;
LL n, l, h, t, sum[maxn], b[maxn], d[maxn];
LL dp[maxn], x[maxn], y[maxn], q[maxn];
inline LL sqr(LL x){ return x*x; } int main(){
scanf("%lld%lld", &n, &l);
for (LL i=1; i<=n; ++i){
scanf("%lld", &sum[i]);
sum[i]+=sum[i-1];
}
h=t=0;
for (LL i=1; i<=n; ++i){
b[i]=sum[i]+i, d[i]=b[i]-l-1;
while (h<t&&y[q[h+1]]-y[q[h]]
<d[i]*(x[q[h+1]]-x[q[h]])) ++h;
dp[i]=dp[q[h]]+sqr(d[i]-b[q[h]]);
x[i]=2*b[i], y[i]=dp[i]+sqr(b[i]);
while (h<t&&(y[i]-y[q[t]])*(x[q[t]]-x[q[t-1]])
<(x[i]-x[q[t]])*(y[q[t]]-y[q[t-1]])) --t;
q[++t]=i;
}
printf("%lld\n", dp[n]);
return 0;
}

最新文章

  1. SQL-Server使用点滴(二)
  2. js整理3
  3. Thinkphp关闭缓存方法总结(转)
  4. Sql group by 分组取时间最新的一条数据
  5. java线性表学习笔记(二)
  6. jQuery插件- Autocomplete应用详解
  7. EL表达式取整
  8. QT实现不规则窗体
  9. 项目中使用emoji表情包与表情的解析过程详情
  10. VSCode里的一些有用的插件
  11. c# winform 窗体之间的传参
  12. Maven入门(含实例教程)
  13. Qt自定义滚动条(不使用样式表)
  14. 通过一篇YAML来学习YAML
  15. GlusterFS分布式存储学习笔记
  16. df命令/du命令/磁盘分区
  17. LeetCode: Rotate List 解题报告
  18. c++ 反转容器的元素顺序(reverse)
  19. springmvc web.xml配置之 -- SpringMVC IOC容器初始化
  20. Flink--Streaming Connectors

热门文章

  1. C++ STL中Map的按Key排序跟按Value排序
  2. linux下安装rpm格式的mysql
  3. mysql多位小数字段用decimal类型
  4. 我理解的关于Vue.nextTick()的正确使用
  5. Filter/replace - VBA
  6. Java企业微信开发_03_自定义菜单
  7. JavaWeb_常用功能_01_文件上传
  8. poj2661 Factstone Benchmark(大数不等式同取对数)
  9. Winform开发入门集中培训系列文章
  10. MarkDown不支持图片放缩。。