原题

令 \(S_{i} =\sum\limits_{j=1}^{i}j\) , \(f_{i}\) 为处理到第 \(i\) 个位置放置守卫塔的最小花费。

观察题意,容易得到在\((1 \le j \le i-1)\) 时,有

\(f_{i}= min\left \{ f_{j}+\sum\limits_{k=j+1}^{i-1} (i-k)+a_{i} \right \}\) ①

\(f_{i}= min\left \{ f_{j}+\sum\limits_{k=j+1}^{i-1} (i-k) \right \} +a_{i}\) ②

\(f_{i}= min\left \{ f_{j}+\sum\limits_{k=j+1}^{i-1}i-\sum\limits_{k=j+1}^{i-1}k \right \} +a_{i}\) ③

\(f_{i}= min\left \{ f_{j}+(i-j-1)*i-\sum\limits_{k=j+1}^{i-1}k \right \} +a_{i}\) ④

\(f_{i}= min\left \{ f_{j}+(i-j-1)*i-(S_{i-1}-S_{j} ) \right \} +a_{i}\) ⑤

此时若存在 \(k<j\) ,且 \(j\) 比 \(k\) 更优时,则 \(f_{j}+(i-j-1)*i-(S_{i-1}-S_{j} )<f_{k}+(i-k-1)*i-(S_{i-1}-S_{k} )\) ⑥ ,化简得 $\frac{f_{j}-f_{k}+S_{j}-S_{k}}{j-k}<i $ ⑦。

接着维护一个单调队列,复杂度 \(O(n\times \log_{}{n} )\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
ll a[1000001],sum[1000001],f[1000001],q[1000001];
double work(ll x,ll y)//注意精度问题
{
return 1.0*(f[y]-f[x]+sum[y]-sum[x])/(y-x);
}
int main()
{
ll n,i,l=0,r=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
sum[i]=sum[i-1]+i;
}
for(i=1;i<=n;i++)
{
while(l<r&&work(q[l],q[l+1])<i)
{
l++;
}
f[i]=f[q[l]]+(i-q[l]-1)*i-(sum[i-1]-sum[q[l]])+a[i];//直接套公式⑤
while(l<r&&work(q[r-1],q[r])>work(q[r],i))
{
r--;
}
r++;
q[r]=i;
}
cout<<f[n];
return 0;
}

写在最后:十年OI一场空,不开long long见祖宗。

BZOJ3156 防御准备 题解的更多相关文章

  1. BZOJ3156: 防御准备

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 442  Solved: 210[Submit][Status] Descript ...

  2. bzoj3156防御准备

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

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

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

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

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

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

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

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

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

  7. [BZOJ3156]防御准备(斜率优化DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP

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

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

  9. 2018.09.29 bzoj3156: 防御准备(斜率优化dp)

    传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...

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

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

随机推荐

  1. java进阶(4)--抽象类与接口的区别

    1.抽象类是半抽象的,接口是全抽象的   2.抽象类中有构造方法,接口中没有构造方法   3.类与类之间不能多继承,接口与接口之间支持多继承   4.一个类可以同时实现多个接口,一个类只能继承一个抽象 ...

  2. CLion创建自定义代码模板

    1.问题 很多时候我们都想要简化代码编写,比如像IDEA那样,写入一个sout即会补全为System.out.println( |inserts cursor here| );的形式 最急切的例子便是 ...

  3. 【TouchGFX】代码结构

    生成代码与用户代码 代码结构图示如下 据上图显示代码结构分为三层 引擎 这是TouchGFX提供的标准类,作为生成类的基类 生成 这是touchgfx designer生成的类,作为用户类的基类,这部 ...

  4. 使用Java分析器优化代码性能,解决OOM问题

    有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 背景 最近我一直在做性能优化,对一个单机应用做性能优化.主要是 ...

  5. [转帖]CIDR

    什么是 CIDR? 无类别域间路由 (CIDR) 是一种 IP 地址分配方法,可提高互联网上的数据路由效率.每台连接到互联网的计算机.服务器和最终用户设备都有一个与之关联的唯一编号,称为 IP 地址. ...

  6. [转帖]配置 Windows XP 正常上网(TLS HTTPS),连接到 NAS

    https://zhuanlan.zhihu.com/p/208685816# 学习一下. 知乎用户8kqKq9 等 45 人赞同了该文章 Windows XP 是经典的.高效的.可靠的.性能良好的操 ...

  7. CentOS7 安装Oracle11g的过程.

    1. 安装preinstall https://www.cnblogs.com/mjiu/ 里面有一个简单方法: cd /etc/yum.repos.d wget http://yum.oracle. ...

  8. 手写promise异步状态修改then方法返回来的结果

    看看下面这一段代码返回来的是什么??? <body> <script type="text/javascript"> let p = new Promise ...

  9. 【小实验】golang中的字节对齐

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 使用golang来调用SIMD指令,发现程序崩溃了: __ ...

  10. 【JS 逆向百例】转变思路,少走弯路,X米加密分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:X米账号登 ...