P4655 [CEOI2017] Building Bridges 题解
P4655
分析
发现如果在 之间建桥,那么 内的所有柱子都是无用的,代价还需加上 内的所有拆除代价。设 为从 走到 的最小代价,于是转移方程就呼之欲出了:
,其中 表示拆除代价的前缀和。发现如果枚举每一个 时间复杂度是 ,显然会 TLE,因此考虑优化。发现这个式子是很典型的斜率优化形式,可以变形为:
然而发现每次查询的斜率并不是有序的,因此不能直接单调队列维护凸包。发现数据范围只到 ,用李超线段树可以方便的求出当 时最小的 ,于是就可以做了。时间复杂度 。
核心代码
qread(n);int i,j,mx=0;for(i=1;i<=n;i++) qread(h[i]),mx=qmax(mx,h[i]);
build(1,0,mx);for(i=1;i<=n;i++) qread(w[i]),w[i]+=w[i-1];
dp[1]=0;upd(1,0,mx,Line{-2*h[1],h[1]*h[1]-w[1]});
for(i=2;i<=n;i++){
dp[i]=que(1,0,mx,h[i])+h[i]*h[i]+w[i-1];
upd(1,0,mx,Line{-2*h[i],dp[i]+h[i]*h[i]-w[i]});
}printf("%lld\n",dp[n]);
本文作者:l_x_y
本文链接:https://www.cnblogs.com/lxy-2022/p/P4655-Solution.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
标签:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步