3156: 防御准备

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 2279  Solved: 959
[Submit][Status][Discuss]

Description

 

Input

第一行为一个整数N表示战线的总长度。

第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai。

Output

共一个整数,表示最小的战线花费值。

Sample Input

10
2 3 1 5 4 5 6 3 1 2

Sample Output

18

HINT

1<=N<=10^6,1<=Ai<=10^9

Source

Katharon+#1

f[i]=f[j]+(i-j)*i-(sum[i]-sum[j])+a[i]
递推方程式和1096有点类似
sum[i]表示i到1的距离

设k<j && j 优于 k
f[j]+(i-j)*i-(sum[i]-sum[j])+a[i]<=f[k]+(i-k)*i-(sum[i]-sum[k])+a[i]
化简得f[j]-i*j+sum[j]<=f[k]-i*k+sum[k]

证明决策单调性
需要证明 对于 t>i j的决策优于k
即f[j]-t*j+sum[j]<=f[k]-t*k+sum[k]
设t=i+v 代入上式得
f[j]-i*j+sum[j]-v*j<=f[k]-i*k+sum[k]-v*k
-v*j<=-v*k 上式成立 决策单调性得证
证毕

斜率方程式
假设k<j&&j决策优与k
满足f[j]-i*j+sum[j]<=f[k]-i*k+sum[k]
=> f[j]+sum[j]-f[k]-sum[k]<=i*(j-k)
=> (f[j]+sum[j]-f[k]-sum[k])/(j-k)<=i
优化dp即可

 #include<bits/stdc++.h>
#define N 1000005
#define ll long long
using namespace std;
ll sum[N],f[N];
int n,q[N],a[N];
inline char gc(){
static char s[],*p1,*p2;
if(p1==p2)p2=(p1=s)+fread(s,,,stdin);
if(p1==p2)return EOF;return *p1++;
}
inline int read(){
int x=;char ch=gc();
while(ch<''||ch>'')ch=gc();
while(ch<=''&&ch>='')x=x*+ch-'',ch=gc();
return x;
}
ll U(int k,int j){return f[j]+sum[j]-f[k]-sum[k];}
int D(int k,int j){return j-k;}
int main(){
n=read();
for(register int i=;i<=n;++i){
a[i]=read();
sum[i]=sum[i-]+i;
}
int h=,t=,j;
for(register int i=;i<=n;++i){
while(h<t&&D(q[h],q[h+])*i>=U(q[h],q[h+]))++h;
j=q[h];f[i]=f[j]+1ll*(i-j)*i-sum[i]+sum[j]+a[i];
while(h<t&&U(q[t],q[t-])*D(i,q[t])>=U(i,q[t])*D(q[t],q[t-]))--t;
q[++t]=i;
}
printf("%lld\n",f[n]);
return ;
}

bzoj3156防御准备 斜率优化dp的更多相关文章

  1. BZOJ3156 防御准备 斜率优化dp

    Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sampl ...

  2. BZOJ 3156: 防御准备 斜率优化DP

    3156: 防御准备 Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...

  3. bzoj3156 防御准备 - 斜率优化

    Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sample Input 102 3 ...

  4. 【BZOJ3156】防御准备 斜率优化DP

    裸题,注意:基本的判断(求Min还是Max),因为是顺着做的,且最后一个a[i]一定要取到,所以是f[n]. DP:f[i]=min(f[j]+(i-j-1)*(i-j)/2+a[i]) 依旧设x&g ...

  5. [BZOJ3156]防御准备(斜率优化DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP

  6. 【BZOJ3156】防御准备 斜率优化

    [BZOJ3156]防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小 ...

  7. bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

    题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...

  8. bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)

    题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...

  9. 【BZOJ-1096】仓库建设 斜率优化DP

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3719  Solved: 1633[Submit][Stat ...

随机推荐

  1. python实现维吉尼亚解密

    # -*-coding:UTF-8-*- from sys import stdout miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXR ...

  2. ASP.NET MVC中错误处理方式

    /// <summary> /// 标记了HandleError,并指明错误处理页为AboutError.aspx /// </summary> /// <returns ...

  3. javascript中获取dom元素的高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  4. 基于dns搭建eureka集群

    eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...

  5. 英语词汇(2)fall down,fall off和fall over

    一.fall down,fall off和fall over都表示"摔倒.跌倒"的意思,但它们各自的含义不同. 1.fall over 落在...之上, 脸朝下跌倒 fall ov ...

  6. 新概念英语(1-51)A pleasant climate

    新概念英语(1-51)A pleasant climate Does it ever snow in Greece? A:Where do you come from? B:I come from G ...

  7. express学习(三)—— cookie和session

    express学习(三)-- cookie和session cookie存在浏览器中,最大只能保存4K数据,不安全 session存在服务器中,不能独立(先读取cookie再读取session),较安 ...

  8. python/基础输出输入用法

    输出及输入的简单用法 print print,中文意思是打印,在python里它不是往纸上打印,而是打印在命令行,或者叫终端.控制台里面.print是python里很基本很常见的一个操作,它的操作对象 ...

  9. Java:日期类Date与Calendar

    Timestamp类型与日期类型之间的转化? Timestamp timestamp = Timestamp.valueOf("2017-03-17 07:00:00"); Dat ...

  10. POJ-2923 Relocation---01背包+状态压缩

    题目链接: https://vjudge.net/problem/POJ-2923 题目大意: 有n个货物,给出每个货物的重量,每次用容量为c1,c2的火车运输,问最少需要运送多少次可以将货物运完 思 ...