HDU3507打印文章 斜率优化入门
打印文章
一、題意及數(shù)據(jù)范圍
題目描述
題目大意:輸出N個(gè)數(shù)字a[N],輸出的時(shí)候可以連續(xù)的輸出,每連續(xù)輸出一串,它的費(fèi)用是 “這串?dāng)?shù)字和的平方加上一個(gè)常數(shù)M”,求最小的費(fèi)用。
數(shù)據(jù)范圍
n<=500000 , m<=1000。
二、解法
基本思路
根據(jù)題目,我們可以列出dp[i]=dp[j]+(a[i]-a[j])2+m,其中dp[i]表示i點(diǎn)是最后一段的最后一個(gè)數(shù)字的最小花費(fèi),a[j]是前綴和。但是這個(gè)dp式顯然是O(n2)的,我們考慮怎么對(duì)它進(jìn)行優(yōu)化,化簡(jiǎn)得:
dp[i]=dp[j]+a[i]2+a[j]2-2*a[i]*a[j]+m
由于這個(gè)dp式在計(jì)算時(shí)需要a[i]和a[j]的乘積,單調(diào)隊(duì)列就不能維護(hù)了。
斜率優(yōu)化
半年多沒(méi)接觸,都不知道怎么用它了……
接下來(lái)有一些玄學(xué)推導(dǎo):
設(shè)用j更新比k更優(yōu),則:
dp[j]+a[i]2+a[j]2-2*a[i]*a[j]+m<dp[k]+a[i]2+a[k]2-2*a[i]*a[k]
消去同類項(xiàng):dp[j]+a[j]2-2*a[i]*a[j]<dp[k]+a[k]2-2*a[i]*a[k]
移項(xiàng):dp[j]-dp[k]+a[j]2-a[k]2<2*a[i]*(a[j]-a[k])
我們?cè)O(shè)f[j]=dp[j]+a[j]2,f[k]=dp[k]+a[k]2
dp[j]?a[k]a[j]?a[k]\frac{dp[j]-a[k]}{a[j]-a[k]}a[j]?a[k]dp[j]?a[k]?<2*a[i]
這個(gè)東西……是不是很像斜率
哈!這就是它為什么要叫斜率優(yōu)化。
具體實(shí)現(xiàn)
其實(shí)最重要的東西我都講了,我們可以用這個(gè)式子結(jié)合單調(diào)隊(duì)列維護(hù)凸包,就能過(guò)了。
看代碼吧。
注:本篇題解只是斜率優(yōu)化入門,沒(méi)有深究,后面做到難題時(shí)再補(bǔ)幾發(fā)博客吧
總結(jié)
以上是生活随笔為你收集整理的HDU3507打印文章 斜率优化入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1.1.8 DR和BDR
- 下一篇: 用户行为分析模型实践--漏斗分析模型