bzoj3156 防御准备(斜率优化)
Time Limit: 10 Sec Memory Limit: 512 MB
Input
第一行为一个整数N表示战线的总长度。
第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai。
Output
共一个整数,表示最小的战线花费值。
Sample Input
2 3 1 5 4 5 6 3 1 2
Sample Output
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 防御准备(斜率优化)的更多相关文章
- bzoj3156 防御准备 - 斜率优化
Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sample Input 102 3 ...
- bzoj3156防御准备 斜率优化dp
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2279 Solved: 959[Submit][Status][Discuss ...
- BZOJ3156 防御准备 斜率优化dp
Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sampl ...
- 【BZOJ3156】防御准备 斜率优化
[BZOJ3156]防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小 ...
- BZOJ 3156: 防御准备 斜率优化DP
3156: 防御准备 Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战 ...
- 【BZOJ3156】防御准备 斜率优化DP
裸题,注意:基本的判断(求Min还是Max),因为是顺着做的,且最后一个a[i]一定要取到,所以是f[n]. DP:f[i]=min(f[j]+(i-j-1)*(i-j)/2+a[i]) 依旧设x&g ...
- 【BZOJ3156】防御准备(动态规划,斜率优化)
[BZOJ3156]防御准备(动态规划,斜率优化) 题面 BZOJ 题解 从右往左好烦啊,直接\(reverse\)一下再看题. 设\(f[i]\)表示第\(i\)个位置强制建立检查站时,前面都满足条 ...
- 【BZOJ-3156】防御准备 DP + 斜率优化
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 951 Solved: 446[Submit][Status][Discuss] ...
- BZOJ3156 防御准备 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8688187.html 题目传送门 - BZOJ3156 题意 长为$n$的序列$A$划分,设某一段为$[i,j] ...
- BZOJ3156 防御准备(动态规划+斜率优化)
设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...
随机推荐
- axios中put和patch的区别(都是update , put是需要提交整个对象资源,patch是可以修改局部)
patch方法用来更新局部资源,这句话我们该如何理解? 假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段.可你的编辑功能因为需求,在某个特别的 ...
- Python---TKinter项目实战---屏保
### 项目分析 - 屏保可以自己启动,也可以手动启动 - 一旦敲击键盘或者移动鼠标后,或者其他的引发时间,则停止 - 如果屏保是一幅画的话,则没有画框 - 图像的动作是随机的,具有随机性,可能包括颜 ...
- SonarQube规则之bug类型
1.".equals()" should not be used to test the values of "Atomic" classes.bug 主要不要 ...
- RN组件的生命周期
来自:http://www.devio.org/tags/#React%20Native
- PHP入门培训教程 一个漂亮的PHP验证码
如何写一个漂亮的PHP验证码?兄弟连PHP培训 小编分享一段代码给大家: <?php class Imagecode{ private $width ; private $height; pri ...
- 几种Android混淆和逆向工具介绍
针对Android面临的安全风险,一些防止逆向的方法应运而生.代码混淆在X86架构上曾经被广泛研究,他被用于保护软件的只是产权,但是恶意软件也常常使用他来对抗杀毒软件或者对抗逆向分析者,代码混淆可以给 ...
- iOS-KMNavigationBarTransition 框架学习
最后更新: 2017-06-21 一.文件结构 二.KMSwizzle KMSwizzle主要就一个方法交换的代码 2.1 class_getInstanceMethod() 获取某个类实例的方法, ...
- 《SQL Server 2012 T-SQL基础》读书笔记 - 8.数据修改
Chapter 8 Data Modification SQL Server 2008开始,支持一个语句中插入多行: INSERT INTO dbo.Orders (orderid, orderdat ...
- leetcode-mid-array-3 Longest Substring Without Repeating Characters
mycode 99.21% class Solution(object): def lengthOfLongestSubstring(self, s): """ :ty ...
- 通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
[cpp] view plaincopyprint? /* windows2003 x86/x64 window7 x86 windows2008 R2 x64测试通过 */ #include < ...