1. 程式人生 > >【決策單調性的動態規劃】noi2009詩人小G

【決策單調性的動態規劃】noi2009詩人小G

關於決策單調性在網上有一篇非常好的論文----<1D1D動態規劃優化初步>.

O(N^2)的演算法想必大家一定秒出了,可以發現這道題所用的方程是個經典1D1D方程:f[i]=min{f[j]+cost[i,j]};

那麼我們的任務就是證明決策單調性在直接套用模板即可,所謂決策單調性,就是我們要證明這樣一個命題:

如果 f[k]的最優決策是j,f[k-1]的最優決策是i,(i<j),那麼對於所有f[l](l>k),使用j轉移都會比使用i轉移優,對於所有f[l](l<=k),使用i轉移都會比使用j轉移優。

首先我們可以得到的已知條件是使用i轉移f[k]比使用j轉移f[k]要優,j轉移f[k+1]比使用i轉移f[k+1]要優,經過一頁紙的數學公式討論以後,果斷放棄了,發現使用數形結合更好解釋。

設cost[k,j]=|c[j]|^p,cost[k,i]=|c[i]|^p,首先可知c[j]-c[i]為定值(j>i),那麼現在我們要證明的就是隨著k的遞增,|c[j]|^p-|c[i]|^p是一個單調的函式就可以了,我們把它對映到函式上:

對於k不斷增大,可以發現dis=|c[j]|^p-|c[i]|^p是單調變化的(因為帶了個絕對值所以不知道怎麼求導。。尋找數學帝)

就這樣解決了。

程式碼: