斜率優化總結

2022-05-08 01:09:09 字數 2132 閱讀 1339

首先,推薦乙個大佬的部落格,講解非常詳細,所以不會斜率優化的請移步這裡,本部落格主要講題目分析qwq

主要講解題目:

1.[hnoi2008玩具裝箱]

2.[zjoi2007倉庫建設]

3.[usaco08mar土地徵用land acquisition]

4.[apio2010特別行動隊]

下面,開始吧。

題目分析:

/*   如何看出它是個斜率優化的題呢?

first:我們可以輕鬆的看出它是個dp

next:資料範圍對於 $o(n^2)$顯然不大友好

then: 怎麼辦呢?      肯定是得優化的,但怎麼優化,用什麼優化才是關鍵。*/

估計很多讀者(呃。。such as本人)想到這裡,直接的反應是:(算了,算了,不管了,寫個dp式子,拿個暴力分得了) 於是對於此題,經過一番分析後,我們可以發現,有好幾種方法列出狀態及轉移方程。

比如說$o(n^3)$的區間dp,讀者們是可以較輕鬆列出的,但是這樣的話,我們驚訝的發現:這玩意兒沒辦法優化,(寫的極其優美的情況下)才是$o(n^3)$的。   此種——只適合暴力。

再想想,有沒有$o(n^2)$的做法。

當然是有的,我們可以將狀態這樣設: $f[i]$ 表示裝到第$i$個玩具,最小的花費是多少。   這樣我們接下來可以直接列舉上乙個打包壓縮的位置$j$,用$f[j]$來更新我們的$f[i]$,時間複雜度$o(n^2)$。

方程是這樣的$f[i]=min$ 其中$sum$陣列維護的是題目中$c$陣列的字首和(為了計算費用方便)

$!!!$接下來的過程才是重頭戲,經過上面dalao部落格的學習後,我們知道了斜率優化這個東西,它的本質是要將上面的轉移方程轉化為 $y=kx+b$的形式,其中$b$就是我們要求的$f[i]$。(方便求)

於是,開始了漫長的導式子過程:  (部分摘自上面那位的blog......)

我們可以知道,所有只和$i$有關的項,和常數項可以暫時拿掉(相當於放在$b$旁邊),最後再加,因為它是個定值,對答案沒有影響,而且在以後的相減過程中,都是可以消去的項(大家不妨可以保留後試一試,看看對答案是否有影響)。

然後呢,我們令 $s[x]=sum[x]+x$

上面那個式子就成了這樣: $f[i]=f[j]+s[i]^2+(s[j]-l)^2-2*s[i]*(s[j]-l)$

移項:$f[j]+s[i]^2+(s[j]+l)^2=2*s[i]*(s[j]+l)+f[i]$

省略式子(簡化):$f[j]+(s[j]+l)^2=2*s[i]*(s[j]+l)+f[i]$

然後這一坨  $f[j]+(s[j]+l)^2$ 就是 $y$ ,$2*s[i]$就是$k$,$f[i]$便是$b$,$s[j]$便是$x$(至於$l$為什麼可以拿掉,因為在維護上面的式子時,我們需要做差,這一過程後,我們發現,$l$消失了。。)。

finally:可以用斜率優化的一貫做法來解題了。 首先要看好,要維護的凸包是向上的,還是向下的。(用人話來說,就是看看這個題是維護最小的花費,還是最大的花費。)然後建個平面直角座標系,每個點的座標便是 $(s[j],f[j]+(s[j]+l)^2)$ ,然後。。在此就不贅述了,剩下的上面那篇部落格裡就都有了,而且也是些套路的問題。

$!!!$這裡有個比較重要的問題,就是我們一定一定要看好斜率$k$的符號,以便處理一些細節問題。

以下是**:

#include #include #include using namespace std;

const int n=50001;

int n, l;

long long s[n];

long long f[n];

long long q[n];

double f_x(int x)

double f_y(int x)

double f_k(int a,int b)

int main()

int head, tail;

head=tail=0;

for(int i=1;i<=n;i++)

s[i]+=i;

for(int i=1;i<=n;i++)

{while(head// 以下題均為略講,如有特殊需要注意的地方,會加重處理。

呃。。其實我最初分析這道題時,認為和上一道沒什麼兩樣。。。(其實真沒什麼兩樣),比較裸的概率dp,做起來,**看起來,都差不多。(未完待續。。。)

斜率優化總結

斜率優化是用於優化一些線性dp,主要思想類似於凸包。下面來看乙個例題 hdu 3507 由題意不難想到是dp,也很容易退出轉移過程f i m in f j s i s j 2 m i 0 i 1 但是一看 n 的範圍馬上就萎了,下面來看看用斜率怎麼優化。現將推出的轉移方程化簡 f i m in f ...

斜率優化總結

考慮如下 dp dp i max min a i b j c i d j j i 其中,a i c i 只與i有關,b j d j 只與j有關。括號裡有與i,j同時有關的項,導致單調佇列優化失效,但是如果這樣的項只有乙個可以採用斜率優化。方法如下 將此dp方程轉化為 dp i a i max min...

斜率優化總結

題目 luogu p2365 任務安排 題解 題解 p2365 任務安排 對於此類方程 f i begin f j val i,j end 暫時忽略min和範圍得 f i f j val i,j 整理得 f j val i,j f i 令 val i,j f i g j h i 則 f j f i ...