列出DP方程式:设f[i]表示分组完前i件物品的最小花费,为方便计算,
设sum[i]表示是前i件物品的长度和。
f[i]=min(f[j]+(sum[i]-sum[j]+i-j-L-1)^2) [0<=j<i]
求复杂度O(n)的解法

斜率优化入门题
对于这类方程f(i)=a(i)*b(j)+a(i)+b(j)
工具:构造直线,单调队列
令a(i)=sum(i)+i, b(j)=sum(j)+j+L+1
f(i)=f(j)+(a(i)-b(j))^2
=f(j)+a(i)^2-2*a(i)*b(j)+b(j)^2
2*a(i)*b(j)+f(i)-a(i)^2=f(j)+b(j)^2
//以j为变量,i为常量来看
坐标角度来讲,f(i)含义为:斜率为k=2*a(i)的直线过点P(b(j),f(j)+b(j)^2)与y轴的截距加上a(i)^2
即求这个截距的最小值
结合图像

存在单调队列的最优的 P 点(图中用直线连接)组成了一个下凸包
几点说明:
1.随着i增加,目标斜率k=2*a(i)也在增加(sum(i)是前缀和)
2.目标坐标点为直线与凸包刚好相切的点,即slope(Pj,Pj+1)下面的斜率都小于k,上面斜率都大于k
单调队列:
对队首:while(slope(Phead,Phead+1)<2*a(i))head++; //把前面不要的都剪掉
筛选出来的q(head)即为最优解
f(i)=f(q(head))+(a(i)-b(q(head))^2
对队尾:while(slope(Ptail-1,Ptail)<slope(Ptail-1,Pi))tail--;q(++tail)=i;//如果新加入的Pi与Ptail-1的斜率更小,那么就替换掉Ptail

上代码:
inline db a(int i){return sum(i)+i;}
inline db b(int i){return a(i)+L+1;}
inline db X(int i){return b(i);}
inline db Y(int i){return f(i)+b(i)*b(i);}
inline db slope(int i,j){return (Y(i)-Y(j))/(X(i)-X(j));}

head=tail=1;
For(i,1,n){
while(head<tail&&slope(q(head),q(head+1))<2*a(i))head++;
f(i)=f(q(head))+(a(i)-b(q(head))*(a(i)-b(q(head));
whiel(slope(q(tail-1),q(tail))>slope(q(tail-1),i))tail--;
q(++tail)=i;
}
cout<<f(n);

P3195 [HNOI2008]玩具装箱TOY的更多相关文章

  1. P3195 [HNOI2008]玩具装箱TOY(斜率优化dp)

    P3195 [HNOI2008]玩具装箱TOY 设前缀和为$s[i]$ 那么显然可以得出方程 $f[i]=f[j]+(s[i]-s[j]+i-j-L-1)^{2}$ 换下顺序 $f[i]=f[j]+( ...

  2. [luogu P3195] [HNOI2008]玩具装箱TOY

    [luogu P3195] [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆, ...

  3. P3195 [HNOI2008]玩具装箱TOY 斜率优化dp

    传送门:https://www.luogu.org/problem/P3195 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任 ...

  4. 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP

    题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...

  5. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  6. [洛谷P3195][HNOI2008]玩具装箱TOY

    题目大意:有n个物体,大小为$c_i$.把第i个到第j个放到一起,容器的长度为$x=j-i+\sum\limits_{k-i}^{j} c_k$,若长度为x,费用为$(x-L)^2$.费用最小. 题解 ...

  7. 洛谷P3195 [HNOI2008]玩具装箱TOY 斜率优化

    Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100000 ...

  8. 洛谷 P3195 [HNOI2008]玩具装箱TOY

    题意简述 有n个物体,第i个长度为ci 将n个物体分为若干组,每组必须连续 如果把i到j的物品分到一组,则该组长度为 \( j - i + \sum\limits_{k = i}^{j}ck \) 求 ...

  9. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

随机推荐

  1. POJ2186(强连通分量分解)

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35035   Accepted: 14278 De ...

  2. AMD与CMD的异同

    AMD与CMD的异同? 1.从官方推荐的写法上面得出: CMD ----- 依赖就近 //CMD define(function(require,exports,module){ var a = re ...

  3. django-强大的ORM

    一.ORM简介 (对象关系映射:object relationship mapping) MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的 ...

  4. CPA理论与Base理论

    CPA理论: 由于对系统或者数据进行了拆分,我们的系统不再是单机系统,而是分布式系统,针对分布式系统的CAP原理包含如下三个元素. C:Consistency,一致性.在分布式系统中的所有数据 备份, ...

  5. OSGI企业应用开发(九)整合Spring和Mybatis框架(二)

    上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问 ...

  6. [JAVA] 重写以及@Override标签

    以前JAVA看的少,最近做项目,对@Override的调用顺序有点疑惑,故查了一些资料.既然查资料了,那就把能看到的知识点整理一下,以供日后学习. 原文地址请保留http://www.cnblogs. ...

  7. 成为Java顶尖程序员,先过了下面问题!

    一.数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度. 用Java写一个冒泡排序算法 描述一下链式存储结构. 如何遍历一棵二叉树? 倒排一个LinkedList. 用Java写一个递归遍历目 ...

  8. .NET笔试题集(四)

    转载于:http://www.cnblogs.com/ForEvErNoME/archive/2012/09/10/2678727.html 1.请你简单的说明数据库建立索引的优缺点 使用索引可以加快 ...

  9. 谨慎使用MyBatis自动生成Where语句

    最近监控到类似这样一个慢查询: select XX_time from XXOrderInfo WHERE ( OrderId is not null and OrderId = N'xxxx') x ...

  10. 【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)

    15.4.2 Change Buffer(变更缓冲)   The change buffer is a special data structure that caches changes to se ...