BZOJ.1010.[HNOI2008]玩具装箱toy(DP 斜率优化/单调队列 决策单调性)
题目链接
斜率优化 不说了 网上很多 这的比较详细->Click Here or Here
//1700kb 60ms
#include<cstdio>
#include<cctype>
//#define gc() getchar()
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=5e4+5,MAXIN=1e5;
int n,C,S[N],q[N];
char IN[MAXIN],*SS=IN,*TT=IN;
LL f[N];
inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
inline LL Squ(LL x){
return x*x;
}
inline LL X(int j,int k){
return (S[j]-S[k])<<1;
}
inline LL Y(int j,int k){
return f[j]+Squ(S[j]+C)-(f[k]+Squ(S[k]+C));
}
int main()
{
n=read(),C=read()+1;
for(int i=1;i<=n;++i) S[i]=S[i-1]+read()+1;
// for(int i=1;i<=n;++i) S[i]+=i;
int h=1,t=1; q[1]=0;
for(int i=1;i<=n;++i)
{
while(h<t && Y(q[h+1],q[h])<=S[i]*X(q[h+1],q[h])) ++h;
f[i]=f[q[h]]+Squ(S[i]-S[q[h]]-C);
while(h<t && Y(i,q[t])*X(q[t],q[t-1])<=Y(q[t],q[t-1])*X(i,q[t])) --t;
q[++t]=i;
}
printf("%lld",f[n]);
return 0;
}
由决策单调,单调队列写法:\(\mathcal O(n\log n)\)
//2288kb 140ms
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 100000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=50005;
int n,L;
LL sum[N],f[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Node{
int l,r,pos;//pos是区间[l,r]的最优转移点
}q[N];
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
inline LL Squ(LL x){
return x*x;
}
inline LL Cost(int i,int p){//在i之前,分割p处
return f[p]+Squ((LL)(i-p-1+sum[i]-sum[p]-L));
}
int Find(Node t,int x)
{
int l=t.l, r=t.r, mid;
while(l<=r)
if(mid=l+r>>1, Cost(mid,x)<Cost(mid,t.pos)) r=mid-1;
else l=mid+1;
return l;
}
int main()
{
n=read(), L=read();
for(int i=1; i<=n; ++i) sum[i]=sum[i-1]+read();
int h=1,t=1; q[1]=(Node){0,n,0};
for(int i=1; i<=n; ++i)
{
if(i>q[h].r) ++h;
f[i]=Cost(i,q[h].pos);
if(Cost(n,i)<Cost(n,q[t].pos))//为什么要拿n比??不解。
{
while(h<=t && Cost(q[t].l,i)<Cost(q[t].l,q[t].pos)) --t;//队尾区间的l用i都比pos更优了,而决策点是单调的,所以[l,r]肯定都要不选pos而选i了
if(h>t) q[++t]=(Node){i,n,i};
else
{
int Pos=Find(q[t],i);
q[t].r=Pos-1, q[++t]=(Node){Pos,n,i};
}
}
}
printf("%lld",f[n]);
return 0;
}
BZOJ.1010.[HNOI2008]玩具装箱toy(DP 斜率优化/单调队列 决策单调性)的更多相关文章
- 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)
http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题意: 思路: 容易得到朴素的递归方程:$dp(i)=min(dp(i),dp(k)+(i-k ...
- BZOJ 1010 [HNOI2008]玩具装箱toy:斜率优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题意: 有n条线段,长度分别为C[i]. 你需要将所有的线段分成若干组,每组中线段的 ...
- 1010: [HNOI2008]玩具装箱toy [dp][斜率优化]
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...
- [bzoj1010](HNOI2008)玩具装箱toy(动态规划+斜率优化+单调队列)
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有 的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1.. ...
- 1010: [HNOI2008]玩具装箱toy(斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 12280 Solved: 5277[Submit][S ...
- [HNOI2008]玩具装箱TOY --- DP + 斜率优化 / 决策单调性
[HNOI2008]玩具装箱TOY 题目描述: P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京. 他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器 ...
- BZOJ1010: [HNOI2008]玩具装箱toy(dp+斜率优化)
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 12451 Solved: 5407[Submit][Status][Discuss] Descript ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
随机推荐
- Linux内存管理--基本概念【转】
转自:http://blog.csdn.net/myarrow/article/details/8624687 1. Linux物理内存三级架构 对于内存管理,Linux采用了与具体体系架构不相关的设 ...
- nodejs 使用http模块保存源码
var xpath=require("xpath"); var fs=require("fs"); var dom = require('xmldom').DO ...
- springboot系列十五、springboot集成PageHelper
一.介绍 项目中经常会遇到分页,PageHelper为我们解决了这个问题.本质上实现了Mybatis的拦截器,作了分页处理. 二.配置PageHelper 1.引入依赖 pagehelper-spri ...
- rsync同步(winxdows到linux/linux到linxu同步)
1.什么是rsync? -rsync是类unix系统下的数据镜像备份工具——remote sync.一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主 ...
- HDU 3579
标准同余方程组,只是在求出值后如果为0,应该输出Mi的Lcm: #include<iostream> #include<cstdio> #include<cstring& ...
- CopyPropertis
commons-beanutils.jar PropertyUtils.copyProperties(Object dest, Object orig) spring-beans.jar BeanUt ...
- java 延时的几种方法方法
Java 延时常见的几种方法 1. 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { while (true) { ...
- tomcat 拒绝服务
一 尝试重新下载二进制安装包安装包 wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0 ...
- Java8 容器类详解
ArrayList Vector CopyOnWriteArrayList LinkedList HashMap ConcurrentHashMap LinkedHashMap 使用场景 随机访问 ...
- python+selenium五:多窗口切换与获取句柄
from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time driver = webdri ...