BZOJ 1010 [HNOI2008]玩具装箱toy:斜率优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010
题意:
有n条线段,长度分别为C[i]。
你需要将所有的线段分成若干组,每组中线段的编号必须连续。
然后每组中的线段接成一排,若线段的编号为i to j,则总长度X = j - i + ∑ C[i to j]。
对于每一个组,花费为(X - L)^2,其中L为给定常量。
问你最小总花费。
题解:
表示状态:
dp[i]表示已经将1 to i的线段分好组了,此时的最小总花费。
找出答案:
ans = dp[n]
如何转移:
设s[i] = ∑ C[1 to i], L = L + 1.
dp[i] = min dp[j] + (s[i]-s[j]- L)^2 (0 <= j < i)
边界条件:
dp[0] = 0
斜率优化:
设j < k,且k的决策更优。
则:dp[j] + (s[i]-s[j]- L)^2 > dp[k] + (s[i]-s[k]- L)^2
整理得:(dp[k]+(s[k]+L)^2-dp[j]+(s[j]+L)^2) / (2*(s[k]-s[j])) < s[i]
所以slope(i,j) = (dp[i]+(s[i]+L)^2-dp[j]+(s[j]+L)^2) / (2*(s[i]-s[j]))
由于s[i]递增,所以单调队列维护下凸壳即可。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 50005 using namespace std; int n,L;
int q[MAX_N];
long long s[MAX_N];
long long dp[MAX_N]; inline double slope(int i,int j)
{
return (dp[i]+(s[i]+L)*(s[i]+L)-dp[j]-(s[j]+L)*(s[j]+L))/(2.0*(s[i]-s[j]));
} int main()
{
cin>>n>>L; L++;
for(int i=;i<=n;i++) cin>>s[i];
for(int i=;i<=n;i++) s[i]+=s[i-];
for(int i=;i<=n;i++) s[i]+=i;
int l=,r=;
for(int i=;i<=n;i++)
{
while(l<r && slope(q[l],q[l+])<=s[i]) l++;
dp[i]=dp[q[l]]+(s[i]-s[q[l]]-L)*(s[i]-s[q[l]]-L);
while(l<r && slope(q[r],i)<slope(q[r-],q[r])) r--;
q[++r]=i;
}
cout<<dp[n]<<endl;
}
BZOJ 1010 [HNOI2008]玩具装箱toy:斜率优化dp的更多相关文章
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- Bzoj 1010: [HNOI2008]玩具装箱toy(斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MB Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定 ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
- 【bzoj1010】[HNOI2008]玩具装箱toy 斜率优化dp
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- [luogu3195 HNOI2008] 玩具装箱TOY (斜率优化dp)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- P3195 [HNOI2008]玩具装箱TOY 斜率优化dp
传送门:https://www.luogu.org/problem/P3195 题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY——斜率优化DP
题目:https://www.luogu.org/problemnew/show/P3195 第一次用斜率优化...其实还是有点云里雾里的: 网上的题解都很详细,我的理解就是通过把式子变形,假定一个最 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- bzoj 1010 [HNOI2008]玩具装箱toy(DP的斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7874 Solved: 3047[Submit][St ...
- BZOJ 1010 [HNOI2008]玩具装箱toy
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7184 Solved: 2724[Submit][St ...
随机推荐
- C语言include预处理命令与多文件编译
#include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂. 一.#include预处理指令的基本使用 预处理指令可以将别处的源代码内容插入到 ...
- 安装SQLserver 2014(For AlwaysOn)
SQLserver 2014 AlwaysOn在SQLserver 2012的基础之上,进行了非常大程度的添加.如能够通过"加入 Azure 副本向导"简化了用于 AlwaysOn ...
- 使用ffmpeg下载m3u8流媒体
安装 编译好的windows可用版本的下载地址(官网中可以连接到这个网站,和官方网站保持同步): http://ffmpeg.zeranoe.com/builds/ 或者: 百度网盘https://p ...
- ps -ef 和 aux 区别
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- XML5632 : Only one root element is allowed. Line: 1, Column 1
奇葩啊, 最后查出来是因为有一个svg文件名对不上...
- Unity Editor Inspector编辑模板
效果图: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEdito ...
- unity回调函数范例
using System.Collections; using System.Collections.Generic; using UnityEngine; public class callback ...
- Java编码规范之数据对象命名
数据对象分多种,为方便阅读并区分各数据对象的用途,习惯将数据对象分为以下几类,供参考: 持久对象 PO(persistant object)对象关系映射(ORM)概念的产物,基本上对象的成员变量对应了 ...
- Zabbix-Agent 客户端安装配置
1.安装Zabbix官方的yum源 [root@crazy-acong ~]# rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zab ...
- JavaScript 中 onload 事件绑定多个方法的优化建议
页面加载完毕时会触发 onload 事件.基于内容(HTML)要与行为(JavaScript)分离的编码思想,我们需要将一些对页面的初始化操作写在方法内,并通过window.onload = func ...