BZOJ3156 防御准备 题解
令 \(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 防御准备 题解的更多相关文章
- BZOJ3156: 防御准备
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 442 Solved: 210[Submit][Status] Descript ...
- bzoj3156防御准备
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1349 Solved: 605[Submit][Status][Discuss ...
- BZOJ3156 防御准备 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8688187.html 题目传送门 - BZOJ3156 题意 长为$n$的序列$A$划分,设某一段为$[i,j] ...
- bzoj3156防御准备 斜率优化dp
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2279 Solved: 959[Submit][Status][Discuss ...
- BZOJ3156 防御准备(动态规划+斜率优化)
设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...
- BZOJ3156: 防御准备 【斜率优化dp】
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2207 Solved: 933 [Submit][Status][Discu ...
- [BZOJ3156]防御准备(斜率优化DP)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3156 分析: 简单的斜率优化DP
- bzoj3156 防御准备 - 斜率优化
Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sample Input 102 3 ...
- 2018.09.29 bzoj3156: 防御准备(斜率优化dp)
传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...
- BZOJ3156 防御准备 斜率优化dp
Description Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sampl ...
随机推荐
- Proxifier 2023年11月时最新版 激活教程
前言 Proxifier 是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链.支持64位系统支持Xp,Vista,Win7,支持s ...
- 机器学习-无监督机器学习-kmeans-17
目录 1. 什么是聚类 2. 代码实现 1. 什么是聚类 无监督机器学习的一种 输入数据只有X 没有y 将已有的数据 根据相似度 将划分到不同的簇 (花团锦簇) 步骤: 随机选择k个簇的中心点 样本根 ...
- 打 multi-fidelity RL 旗号,但是幼稚监督学习 + 迁移学习
文章名称:Multi-fidelity reinforcement learning framework for shape optimization 链接:https://www.sciencedi ...
- zookeeper 特点、使用场景及安装,配置文件解析
本文为博主原创,未经允许不得转载: 1. Zookeeper 特点: ZooKeeper是用于分布式应用程序的协调服务.它公开了一组简单的API,分布式应用程序可以基于这些API用于同步,节点状态.配 ...
- MCU芯片设计流程
MCU设计流程 1.产品开发整体流程 Integrated Product Development(IPD) TR-Technique Review-技术评审 xDCP-管理层决定是否开发 这里的验证 ...
- SpringBoot开启动态定时任务并手动、自动关闭
场景需求:在执行某个方法的两小时之后进行某个操作 涉及:定时任务.哈希表 需要注意:业务逻辑层是单一实例的,所以在定时任务类内操作业务逻辑层的某个属性和在业务逻辑层内操作的都是同一个. 疑问:Thre ...
- 基于OpenJDK部署clickhouse-local镜像的快捷方法
基于OpenJDK部署clickhouse-local镜像的快捷方法 摘要 前期搭建了一套基于OpenJDK的Clickhouse的服务端的镜像 可以简单使用dbeaver进行连接与使用. 后来发现需 ...
- [转帖]Linux系统硬链接和软链接具体实例讲解(超详细)
简介 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名.文件名仅是为了方便人们的记忆和使用, ...
- [转帖]iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多
https://www.cnblogs.com/bonelee/p/6323587.html iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动 ...
- Postgresql 数据库设置备份以及简单清理磁盘空间和wal日志的方法
1. 最近想简单的进行数据库的备份工作, 因为现在数据库主要是用的pg数据库 , 所以想到用文本的方式进行, 有清理了一下日志表的数据 这里一起记录一下. 先记录一下查看比较大的表的信息. 从网上找了 ...