原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3156

防御准备

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[i]dp[i]dp[i]表示在第iii个检查点设哨塔时对于前i" role="presentation" style="position: relative;">iii个点的最优花费.

设j<ij<ij易得:  

dp[i]=min(dp[j]+[1+i−(j+1)][i−(j+1)]2)dp[i]=min(dp[j]+[1+i−(j+1)][i−(j+1)]2)

dp[i]=min(dp[j]+\frac{[1+i-(j+1)][i-(j+1)]}{2})

显然,需要斜率优化,设k<j<ik<j<ik且kkk优于j" role="presentation" style="position: relative;">jjj:  


dp[k]+i2−2ik−i+k2+k2<dp[j]+i2−2ij−i+j2+j2dp[k]+i2−2ik−i+k2+k2<dp[j]+i2−2ij−i+j2+j2dp[k]+\frac{i^2-2ik-i+k^2+k}{2}
dp[k]−dp[j]+k2+k−j2−j2<ik−ijdp[k]−dp[j]+k2+k−j2−j2<ik−ijdp[k]-dp[j]+\frac{k^2+k-j^2-j}{2}
dp[k]−dp[j]+k2+k−j2−j2k−j>idp[k]−dp[j]+k2+k−j2−j2k−j>i\frac{dp[k]-dp[j]+\frac{k^2+k-j^2-j}{2}}{k-j}>i

iii单增。。。So Eazy" role="presentation" style="position: relative;">So EazySo Eazy\mathcal{So\ Eazy}

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M=1e6+5;
ll n,que[M];
ll a[M],dp[M],sum[M];
void in()
{scanf("%lld",&n);for(int i=1;i<=n;++i)scanf("%lld",&a[i]);
}
double slop(ll k,ll j)
{return 1.0*(dp[k]-dp[j]+(k*k+k-j*j-j)/2)/(k-j);
}
void ac()
{ll k,le=0,ri=0;for(int i=1;i<=n;++i){while(le<ri&&slop(que[le],que[le+1])<i)le++;k=que[le];dp[i]=dp[k]+a[i]+(i-k)*(i-k-1)/2;while(le<ri&&slop(que[ri],i)<slop(que[ri-1],que[ri]))ri--;que[++ri]=i;}printf("%lld",dp[n]);
}
int main()
{in();ac();return 0;
}

BZOJ3156 防御准备相关推荐

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

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

  2. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  3. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  4. 斜率优化DP 总结(含凸优化)

    我看了很多%d%a%l%a%o的博客,使我对其印象深刻. 确实,斜率优化的DP式一般都是: f[i]=minf[j]+a[i]∗a[j]+...f[i]=min{f[j]+a[i]*a[j]}+... ...

  5. 斜率优化DP小结(含凸优化)

    目录 斜率DP 2019.8.4 update 凸优化 斜率DP 我看了很多%d%a%l%a%o的博客,使我对其印象深刻. 确实,斜率优化的DP式一般都是: \[f[i]=min(f[j]+a[i]* ...

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

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

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

    传送门 写在前面:感觉文化课要跪 思路:老样子,先化转移式 设f[i]为在第i个位置建守卫塔时的最小费用,那么转移方程就是 f[i]=min(f[j]+(i−j)∗(i−j−1)/2)+a[i])f[ ...

  8. BZOJ 3156: 防御准备( dp + 斜率优化 )

    dp(i)表示处理完[i,n]且i是放守卫塔的最小费用. dp(i) = min{dp(j) + (j-i)(j-i-1)/2}+costi(i<j≤N) 然后斜率优化 ------------ ...

  9. bzoj 3156: 防御准备(斜率DP)

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2148  Solved: 912 [Submit][Status][Discu ...

  10. bzoj 3156: 防御准备

    这个题2333,有一个情况就是从一个点i一直山底的,直接计算出答案,一个是到山顶的,用斜率优化来算,最后答案是两个加起来(可能会说反) 最后,本蒟蒻来BB一下对斜率优化的理解吧. 其实就是无脑的写一个 ...

最新文章

  1. 用cmd运行python文件_怎么用cmd运行python文件
  2. 我的第三个网页制作:b、i、s、u、sub、sup标签的使用
  3. python提交post请求payload webkit_python爬虫实现POST request payload形式的请求
  4. 基于TableStore构建简易海量Topic消息队列
  5. 二分求浮点数的平方根
  6. 湖北省月降水量分布数据
  7. Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
  8. MATLAB把型线图画静水力曲线,静水力曲线计算与绘制指导书
  9. excel 第4讲:排序与筛选
  10. word 去掉段落背景颜色
  11. LoadLibrary无法加载DLL解决思路
  12. 黑马培训---分享点干货二 IOS面试非技术性问题
  13. 集合竞价与连续竞价(开盘价、收盘价的生成)
  14. Hexo + yilia 主题实现文章目录
  15. IP实验3:静态路由和动态路由配置
  16. Ubuntu鼠标延迟,闪烁,消失
  17. 如何做好功能测试,提升测试质量和效率?(测试人员必知)
  18. 自定义彩色进度条效果
  19. java过滤器python是啥_过滤器如何在python中使用softlayer API
  20. 更多有效反链推广 增加反向链接十个方法

热门文章

  1. java infinity 处理_Java:如何执行向-Infinity而不是0的整数除法?
  2. mysql给日期创建索引_如何在MySql的DATETIME字段的日期部分创建索引
  3. 微型计算机乘法部件位于,组成原理复习题8.doc
  4. python异步IO编程(一)
  5. Codeforces 1013
  6. bzoj1565: [NOI2009]植物大战僵尸
  7. SDL2源码分析1:初始化(SDL_Init())
  8. python之模块copy_reg(在python3中为copyreg,功能基本不变)
  9. WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?
  10. [android视频教程] 传智播客android开发视频教程