P3195 [HNOI2008]玩具装箱TOY
列出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的更多相关文章
- 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]+( ...
- [luogu P3195] [HNOI2008]玩具装箱TOY
[luogu P3195] [HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆, ...
- P3195 [HNOI2008]玩具装箱TOY 斜率优化dp
传送门:https://www.luogu.org/problem/P3195 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- [洛谷P3195][HNOI2008]玩具装箱TOY
题目大意:有n个物体,大小为$c_i$.把第i个到第j个放到一起,容器的长度为$x=j-i+\sum\limits_{k-i}^{j} c_k$,若长度为x,费用为$(x-L)^2$.费用最小. 题解 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY 斜率优化
Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100000 ...
- 洛谷 P3195 [HNOI2008]玩具装箱TOY
题意简述 有n个物体,第i个长度为ci 将n个物体分为若干组,每组必须连续 如果把i到j的物品分到一组,则该组长度为 \( j - i + \sum\limits_{k = i}^{j}ck \) 求 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
随机推荐
- Hadoop HDFS 的 HttpFS
参考 Hadoop权威指南 第3章中3.4节 背景 要写一个操作HDFS的web后台(文件CRUD),虽然可以直接使用HDFS提供的FileSystem类然后通过get方法获取到一个Distribut ...
- css之background-position属性实现雪碧图
什么是雪碧图 雪碧图就是CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,就是把多张小图标合并到一张图片上,然后用css的background-position来显示需要显示的部分 ...
- 火狐浏览器sqlite插件
https://addons.mozilla.org/zh-cn/firefox/addon/sqlite-manager/
- 葡萄城报表 SP2 新特性(1)— 单元格智能合并
中国式复杂报表的布局,因为数据的动态性和结构性,导致其布局往往是无规律,且在设计时无法预测的,如单元格合并,通常不仅希望在每一列的数据展现中,能够根据需要自动将相同的单元格合并,且每个单元格之间该属性 ...
- 树莓派 引脚及接口图 AV接口顺序
树莓派 引脚图 注:本表格适用于各版本,并且兼容26Pin的树莓派B,树莓派B为26Pin,其引脚对应于上表的前26Pin. 树莓派 接口图 AV接口又称(RCA),AV接口算是出现比较早的一种接 ...
- Laravel安装教程
1.Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length() 报这个错是因为Apache/bin目录下 l ...
- DevOps之技能面
<教学手册(Teaching Manual)> 教学:人类培养态度.传授知识.训练技能的活动.教学目的:知识与技能的层次:(了解.理解.熟悉.掌握.精通).教学手段:理论与实践的方面:(科 ...
- Jemeter 连接数据库
1.打开Jmeter添加测试计划,(http://central.maven.org/maven2/mysql/mysql-connector-java/6.0.6/mysql-connector-j ...
- python基础一数据类型之元祖
摘要: python基础一中写到数据类型元祖,那么这篇主要讲元祖. 1,元祖定义 tuple1 = (1,2,'a','b') 元祖是不可变数据,所以又名只读列表.那么如何让是元祖可变呢?可以在元祖中 ...
- mysql 建立索引的原则(转)
索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引: 2. ...