【BZOJ3156】防御准备

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

题解:一眼看出斜率优化DP,先列出方程再说

令f[i]表示在i处放置守卫塔,且i左面的格子都被保护时的最小花费。

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

整理一下,发现求的是下凸包,且点的坐标单调不减

题目图片太大导致不能再加图片了好气~

#include <cstdio>
#include <iostream>
#include <cstring>
#define y(_) (f[_]+_*(_+1)/2)
using namespace std;
typedef long long ll;
const int maxn=1000010;
int n;
ll q[maxn],h,t;
ll a[maxn],f[maxn];
int main()
{
scanf("%d",&n);
ll i;
for(i=1;i<=n;i++) scanf("%lld",&a[i]);
h=t=1;
for(i=1;i<=n;i++)
{
while(h<t&&(y(q[h+1])-y(q[h]))<=i*(q[h+1]-q[h])) h++;
f[i]=f[q[h]]+(i-q[h])*(i-q[h]-1)/2+a[i];
while(h<t&&(y(q[t])-y(q[t-1]))*(i-q[t])>=(y(i)-y(q[t]))*(q[t]-q[t-1])) t--;
q[++t]=i;
}
printf("%lld",f[n]);
return 0;
}

【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. BZOJ 3156: 防御准备 斜率优化DP

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

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

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

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

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

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

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

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

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

  9. 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. json_decode() expects parameter 1 to be string, object given

    $data = Weann\Socialite\Facades\Socialite::driver('wechat')->user();//是字符串 $data=json_encode($dat ...

  2. CSS3加载动画

    图1 通常我们都使用gif格式的图片或者使用Ajax来实现诸如这类的动态加载条,但是现在CSS3也可以完成,并且灵活性更大. 选1个例子看看怎么实现的吧: 效果图:   图2 代码: 使用1个名为'l ...

  3. jenkins配置过程遇到的问题

    jenkins 搭建完成后,可以浏览器访问: http://localhost:8081/jenkins, 新建任务过程中遇到以下问题: 1. 源码管理不现实git, 只显示无 解决: 插件管理 -  ...

  4. tensorflow中slim模块api介绍

    tensorflow中slim模块api介绍 翻译 2017年08月29日 20:13:35   http://blog.csdn.net/guvcolie/article/details/77686 ...

  5. e664. 在图像中获取子图像

    // From an Image image = createImage(new FilteredImageSource(image.getSource(), new CropImageFilter( ...

  6. c# combobox 绑定报错

    comboBoxPlanResult.DataSource =new BindingSource(o,null);comboBoxPlanResult.DisplayMember ="Key ...

  7. 统计 fastq 文件 q20 , GC 含量的软件

    二代测序的分析过程中,经常需要统计原始下机数据的数据量,看数据量是否符合要求:另外还需要统计q20,q30,GC含量等反应测序质量的指标: 在kseq.h 的基础上稍加改造,就可以实现从fastq 文 ...

  8. c++ word类型

    word就是16位的数据 随着机器的发展,C++语言本身并没有规定short的位数,不一定是十六位的(随着计算机的发展,可能改变).但word将永远是16位的--机器发展后只需要修改,typedef ...

  9. win8 学习笔记二 输出日志

    Win8 Store App的日志输出不像Desktop App 那么简单,见 这篇文档(http://www.cnblogs.com/xiaokang088/archive/2011/12/27/2 ...

  10. 制作SD卡启动自己编译的uboot.bin

    README for FriendlyARM Tiny4412 -----------------------------------------------------1. Build uboot ...