正题

题目链接:https://www.luogu.com.cn/problem/P4655


题目大意

nnn座桥,删除第iii座会产生wiw_iwi​的代价,相邻的两座桥i,ji,ji,j会产生(hi−hj)2(h_i-h_j)^2(hi​−hj​)2的代价,要求代价最小。


解题思路

设fif_ifi​表示留到第iii座桥的答案,si=∑j=1iwis_i=\sum_{j=1}^iw_isi​=∑j=1i​wi​,那么有fi=fj+si−1−sj+(hi−hj)2f_i=f_j+s_{i-1}-s_j+(h_i-h_j)^2fi​=fj​+si−1​−sj​+(hi​−hj​)2
fi=si−1+hi2+fj−sj+hj2−2hihjf_i=s_{i-1}+h_i^2+f_j-s_j+h_j^2-2h_ih_jfi​=si−1​+hi2​+fj​−sj​+hj2​−2hi​hj​
其实就是要求最小化fj−sj+hj2−2hihjf_j-s_j+h_j^2-2h_ih_jfj​−sj​+hj2​−2hi​hj​
设Si=fi−si+hi2S_i=f_i-s_i+h_i^2Si​=fi​−si​+hi2​
那么就有fi−si−1−hi2=Sj−2hihjf_i-s_{i-1}-h_i^2=S_j-2h_ih_jfi​−si−1​−hi2​=Sj​−2hi​hj​

然后上CDQCDQCDQ斜率优化就好了,大体是左边排序后处理出左边的凸壳然后考虑它对右边的贡献即可,注意对于hjh_jhj​相等的我们取SjS_jSj​小的点。

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)(同理用归并排序可以做到O(nlog⁡n)O(n\log n)O(nlogn))


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,p[N],s[N],f[N],S[N],h[N],st[N],q[N];
bool cmp(ll a,ll b){return h[a]>h[b];}
bool cMp(ll a,ll b){return (h[a]==h[b])?(S[a]<S[b]):(h[a]<h[b]);}
double slope(ll a,ll b)
{return (double)(S[a]-S[b])/(h[a]-h[b]);}
void cdq(ll l,ll r){if(l==r){S[l]=f[l]-s[l]+h[l]*h[l];return;}ll mid=(l+r)>>1,cnt1=l-1,cnt2=mid;for(ll i=l;i<=r;i++)if(p[i]<=mid)q[++cnt1]=p[i];else q[++cnt2]=p[i];for(ll i=l;i<=r;i++)p[i]=q[i];cdq(l,mid);ll tot=0;for(ll i=l;i<=mid;i++){if(h[p[i]]==h[p[i-1]]&&i!=l)continue;while(tot>1&&slope(st[tot-1],st[tot])>slope(st[tot-1],p[i]))tot--;st[++tot]=p[i];}for(ll i=mid+1;i<=r;i++){while(tot>1&&slope(st[tot-1],st[tot])>2*h[p[i]])tot--;f[p[i]]=min(f[p[i]],s[p[i]-1]+h[p[i]]*h[p[i]]+S[st[tot]]-2*h[p[i]]*h[st[tot]]);}cdq(mid+1,r);sort(p+l,p+r+1,cMp);return;
}
int main()
{memset(f,0x3f,sizeof(f));scanf("%lld",&n);f[1]=0;for(ll i=1;i<=n;i++)scanf("%lld",&h[i]),p[i]=i;for(ll i=1;i<=n;i++)scanf("%lld",&s[i]),s[i]+=s[i-1];sort(p+1,p+1+n,cmp);cdq(1,n);   printf("%lld",f[n]);return 0;
}

P4655-[CEOI2017]Building Bridges【斜率优化dp,CDQ分治】相关推荐

  1. 【BZOJ2149】拆迁队(斜率优化DP+CDQ分治)

    题目: 一个斜率优化+CDQ好题 BZOJ2149 分析: 先吐槽一下题意:保留房子反而要给赔偿金是什么鬼哦-- 第一问是一个经典问题.直接求原序列的最长上升子序列是错误的.比如\(\{1,2,2,3 ...

  2. P4027-[NOI2007]货币兑换【斜率优化dp,CDQ分治】

    正题 题目链接:https://www.luogu.com.cn/problem/P4027 题目大意 nnn天开始时有SSS元钱,每天AAA种股票价格为aia_iai​,BBB种价格为bib_ibi ...

  3. bzoj1492 货币兑换cash dp斜率优化+splay/cdq分治

    斜率优化 首先,由于如果在i天买在j天卖有利可图,那么最优方法就是在i天花完钱在j天卖完.我们令 f i f_i fi​为第i天可以得到的最多钱数,然后可以先列方程求出花完钱在第j天得到的两种金券数 ...

  4. NOI2007 货币兑换 - CDQ分治斜率优化dp

    斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...

  5. 【BZOJ2149】拆迁队,分治+斜率优化DP

    传送门 思路还不错的一道题目,难度不大,但是我在写的时候出了一些细节上的错误 显然题目中的两问都可以通过DP来解决 f[i]f[i]表示保留旧房子ii时,1-i1-i最多能保留多少个旧房子 g[i]g ...

  6. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  7. 斜率优化DP 与数形结合思想

    前言 最近才入了DP优化的大坑-- 发现斜率优化DP还是很有用的 下面会结合一道例题,同时讲解斜率优化DP 正文 先看一下例题:HDU3507 题目大意:有一串数列,要把它分割成若干段 每一段的代价是 ...

  8. CF-311B Cats Transport(斜率优化DP)

    题目链接 题目描述 小S是农场主,他养了 \(M\)只猫,雇了 \(P\) 位饲养员. 农场中有一条笔直的路,路边有 \(N\) 座山,从 \(1\) 到 \(N\)编号. 第 \(i\) 座山与第 ...

  9. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)

    点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\) ...

最新文章

  1. 一盘红烧肉告诉你,本科、硕士和博士区别太大了!
  2. java 模拟鼠标键盘_使用SWT模拟鼠标键盘事件
  3. 算法(第4版)学习笔记
  4. 不用回调方法捕获数据包
  5. 史上首次!世界杯使用视频裁判
  6. 看脸色知体内各积毒 有效清洁内脏妙方
  7. 我的作品-图书馆信息管理系统
  8. 阿里在美申请区块链专利;Win10 最新漏洞被发现;MongoDB 4.2 发布​ | 极客头条...
  9. 饥饿的时候我想起的小食
  10. BIN文件和HEX文件区别
  11. 盛大如何再次“盛大”
  12. 攻略:简易VBS病毒制作
  13. pe中怎么卸载服务器系统更新,方法四: 使用专用工具卸载系统更新补丁(和方法三类同...
  14. FLStudio21无需切换中文语言fl下载中文免费版
  15. vite Unrestricted file system access to
  16. K-means聚类算法原理及python实现
  17. 啦啦啦一棵R语言圣诞树~
  18. 江苏省高校,中专校职称计算机信息技术应用能力考核,江苏省高校中专校专业技术人员职称信息技术应用能力考核资料.doc...
  19. Dubbo监控中心Dubbo-admin安装
  20. 这篇文章终于把中美德三国的工业互联网讲清楚了

热门文章

  1. 需求分析 应该先写业务还是功能_一个套路,拆解常见数据分析需求
  2. linux命令clock,简单了解Linux系统中clock命令的使用方法
  3. php 无限查找下级业绩_PHP 面试踩过的坑
  4. oracle 查看用户状态,Oracle数据库查看用户状态
  5. 模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序_操作系统基础6-支持操作系统的最基本的硬件-中断...
  6. 台电x80plus装linux,纤巧却不简单——台电X80 Plus评测
  7. 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
  8. linux sed 写文件,使用sed对文件进行操作
  9. IDEA如何在包下建立子包
  10. [JavaWeb-CSS]CSS概述