容易推出式子 dp[i]=min(dp[i],dp[j]+(i−j−1+s[i]−s[j]−L)2) 故设 A[i]=i+s[i]−L−1 (与 j 无关的项) B[i]=i+s[i]
故如果 dp[j]+(i−j−1+s[i]−s[j]−L)2) 就是答案,则 dp[i]=dp[j]+(A[i]−B[j])2 分解得 dp[i]=dp[j]+A[i]2+B[j]2−2A[i]B[j]
而斜率优化就是用来解决 dp[i]=a[i]×b[j]+c[i]+d[j] 的。
我们将式子变成 b[j]2+dp[j]=2A[i]B[j]−A[i]2+dp[i]
其中 2A[i],−A[i]2+dp[i] 为常数,故得出函数 y=kx+b
y 表示 b[j]2+dp[j],x 表示 b[j]
k,b 可简单得知。
其中的 x 都是孤立的点,dp[i]=b−A[i]2,所以 b (截距)越小,dp[i] 越小。
通过数形结合可得出斜率第一个大于等于 k 的点,可保证 b 最小。 为何?因为这条斜率为 2A[i] 的直线不能插进凸包。 于是便找到了最优解。 再维护个凸包就行。
作者:lalaouye
出处:https://www.cnblogs.com/lalaouyehome/p/17185915.html
版权:本作品采用「114514」许可协议进行许可。
都这么会猜结论
这个人怎么这么菜
%%%%%%%%%
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?