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 迭代器之列表解析与生成器

     [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...

  2. ASP.NET CORE 自定义视图组件(ViewComponent)注意事项

    *红色字体为固定命名,蓝色为一般命名规则,黄色为ASP.NET CORE 默认查找文件名 概要:1.简单ViewComponent的用法 2.ViewComponent控制器返回值  3.注意事项 1 ...

  3. vue表单详解——小白速会

    一.基本用法 你可以用 v-model 指令在表单 <input> 及 <textarea> 元素上创建双向数据绑定. 但 v-model 本质上不过是语法糖.它负责监听用户的 ...

  4. Docker学习笔记 - Docker的数据卷

    一.什么是数据卷? 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新,不会影响镜像 数据 ...

  5. 新概念英语(1-61)A bad cold

    新概念英语(1-61)A bad cold What is good news for Jimmy? A:Where's Jimmy? B:He's in bed. A:What's the matt ...

  6. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  7. HTNL表单详解

    HTML表单 表单的结构 表单的标签:<form> </form> 常用属性 Name , method(get,post), action(服务器的接收的页面如:reg.ph ...

  8. Java面试题—初级(4)

    31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,"xyz" ...

  9. hue集成hbase出现TSocket read 0 bytes

    解决办法:修改hbase的配置文件 添加以下配置 https://stackoverflow.com/questions/20415493/api-error-tsocket-read-0-bytes ...

  10. ASP.NET Core + Docker +Jenkins 实现持续集成

    1.新建一个ASP.NET Core MVC应用程序: 2.将其上传到git: 3.建立Jenkins任务 (1)选择"新建任务",输入任务名称,选择"自由风格项目&qu ...