Time Limit: 10 Sec  Memory Limit: 512 MB

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


设$f[i]$为已经完成$i+1$到$n$,在$i$放塔的最小代价

$f[i]=a[i]+min(f[j]+ \frac {(j-i-1)(j-i)}{2}),i<j<=n$

移项转化,得

$f[j]+\frac{j(j-1)}{2}=ij+f[i]-\frac{i(i+1)}{2}$

$k=i,x=j$单调

凸包维护单调队列,复杂度$O(n)$

#include<cstdio>
typedef long long ll;
inline ll min(ll A,ll B){return A<B?A:B;}
inline ll max(ll A,ll B){return A>B?A:B;}
int read(){
char c=getchar(); int x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+c-,c=getchar();
return x;
}
#define N 1000005
int n,a[N],h[N],L,R; ll f[N],ans=1e16;
inline ll y(ll j){return f[j]+j*(j-)/;}
inline int chk(ll A,ll B,ll kx,ll ky){return (y(A)-y(B))*kx>=ky*(A-B);}
int main(){
R=n=read();
for(register int i=;i<=n;++i) a[i]=read();
f[n]=a[n]; h[L=R=]=n;
for(register ll i=n-;i;--i){
while(L<R&&chk(h[L],h[L+],,i)) ++L;
f[i]=a[i]+f[h[L]]+(h[L]-i)*(h[L]-i-)/;
while(L<R&&chk(h[R],h[R-],h[R]-i,y(h[R])-y(i))) --R;
h[++R]=i;
ans=min(ans,f[i]+i*(i-)/);
}printf("%lld",ans);
return ;
}

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

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

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

  2. bzoj3156防御准备 斜率优化dp

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2279  Solved: 959[Submit][Status][Discuss ...

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

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

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

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

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

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

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

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

  7. 【BZOJ3156】防御准备(动态规划,斜率优化)

    [BZOJ3156]防御准备(动态规划,斜率优化) 题面 BZOJ 题解 从右往左好烦啊,直接\(reverse\)一下再看题. 设\(f[i]\)表示第\(i\)个位置强制建立检查站时,前面都满足条 ...

  8. 【BZOJ-3156】防御准备 DP + 斜率优化

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 951  Solved: 446[Submit][Status][Discuss] ...

  9. BZOJ3156 防御准备 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8688187.html 题目传送门 - BZOJ3156 题意 长为$n$的序列$A$划分,设某一段为$[i,j] ...

  10. BZOJ3156 防御准备(动态规划+斜率优化)

    设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...

随机推荐

  1. 对15号夏壹队的TD信息通使用体验

    对夏壹队的APP的用户使用体验:首先下载的时候看到这个APP的大小是6M多点不算很大感觉还不错,但是占内存不大也说明了一个问题,它不会有很多的功能. 图标是一个蜜蜂,打开后会有一个登陆界面,一开始没有 ...

  2. React Native 之SectionList

    接上一篇: /pages/SectionListDemo.js import React, {Fragment,Component} from 'react'; import { SafeAreaVi ...

  3. 接口返回buffer的16进制数据如何转换

    我们请求接口数据经常会看到buffer数据,这是我们可以使用data.toString()就可以啦~

  4. 搭建nginx环境(参考腾讯云实验室)

    使用 yum 安装 Nginx: yum install nginx -y 修改 /etc/nginx/conf.d/default.conf,去除对 IPv6 地址的监听,可参考下面的代码示例: s ...

  5. mysql Alias操作符 语法

    mysql Alias操作符 语法 作用:为列名称和表名称指定别名 大理石构件 语法:SELECT column_name(s) FROM table_name AS alias_name mysql ...

  6. (20)C++项目练习三--------【运动物体视频检测跟踪系统】

    1.功能点 (1)视频监控显示 (2)移动物体标定跟踪(轨迹显示) (3)实时视频保存(以时间戳形式) (4)移动物体触发视频保存.报警 (5)视频文件分类.回放.搜索 进行中............ ...

  7. #1126-JSP客户端请求

    JSP 客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的.您可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器 ...

  8. 配置maven方法

    配置maven方法 1.官网下载maven, http://maven.apache.org/download.cgi Only the binaries are required, so look ...

  9. 13 November

    [HEOI2015] 定价 BZOJ 4027: 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 元.5000 元和 9000 元并没有什么本质区别,但是 ...

  10. SQL Server函数大全(三)----Union与Union All的区别

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来. union和unio ...