斜率優化 單調性優化的相似性

2022-02-05 10:33:32 字數 2388 閱讀 8189

寫了一道單調性優化發現 跟斜率優化很像,而且這道題目感覺質量非常的好。

其實斜率優化是基於單調性優化的,但是面對這道題 我竟然連單調性優化都不太會,儘管這個模型非常不好理解。

對於每道題 我都會打乙個暴力 程式一般可得40分左右考試的時候我想時間夠的話可以對拍(儘管現在不太會了)。

dp 考慮 f[i]表示第i個數字的最小的p值

f[i]=max(f[i],a[j]-a[i]+sprt(abs(i-j))(向上))其中 j∈[1,n];

將其優化的話第一要先去掉絕對值然後形成兩個dp式子

f[i]=max(1<=j發現i j緊緊的連在一起根本不是斜率優化的模型 看完一篇超級不錯的題解之後發現是具有單調性的

f[i]=max-a[i]; 想個辦法使得a[j]+sqrt(i-j)最大

發現是單調性優化 get! sqrt(n)的增長速度隨n的增大而減小

因為設 j如果 a[j]+sqrt(i-j)>a[k]+sqrt(i-k)那麼在某一時刻k會比j優秀 決策就擁有了單調性 單調遞增

開乙個三元組(p,l,r) p在l 到 r這個區間之中可以取到最優值開心的dp了

這道題目就是比較難一類的 斜率優化需要轉換一下問題 至於問題的轉換我是看書的因為沒想到貪心當時腦子有點亂

看完書上巧妙的轉換了問題之後 明白了這竟然是一道比較簡單的斜率優化問題! 2a了(第一次寫的是bf)

f[i][j]表示第i個飼養員接走前j個小貓所花費的最小時間

f[i][j]=min(f[i-1][j],f[i-1][k]+t[j]*(j-k)-(s[j]-s[k]));

t陣列是 每個接小貓的花費的最小時間  s[k]是字首和 t[i]=t1[i]-d[i];

然後f[i][j]=min(f[i-1][j],f[i-1][k]+t[j]*(j-k)-(s[j]-s[k]));(1<=k<=j)

此時我處理的是k+1~j的範圍內的東西

f[i][j]=min;

f[i][j]=min(f[i-1][k]-t[j]*k+s[k]}+t[j]*j-s[j];

f[i][j]=min(f[i-1][k]+s[k]-t[j]*k};

f[i-1][k]+s[k]=f[i][j]+t[j]*k;

以k為橫座標t[j]為斜率 斜率為定值 我只需讓截距f[i][j]最小即可

那麼現在t[j]是單調遞增的那麼維護乙個下凸殼就可以...嘿嘿嘿

這麼簡單的斜率優化問題。成功ac

const

int maxn=100002

;int

n,m,p;

ll d[maxn],t[maxn],s[maxn];

ll min(ll x,ll y)

ll f[

102][maxn],l,r,q[maxn];

ldb k(ll w,ll x,ll y)

intmain()

//for(int i=1;i<=m;i++)cout

//for(int i=1;i<=m;i++)cout

];

//for(int i=1;i<=m;i++)cout

for(int i=2;i<=p;i++)

}put(f[p][m]);

return0;

}

view code

決策單調性優化DP 分治優化決策單調性

前言 本來這篇已經寫了 frac 了 然後我關機時忘儲存了。華麗的分割線 對於類似於 dp i j max min dp k 1 j 1 count k,i 不妨設 當 最後一次 max min 更新時 f i,j k 若有 forall i,j in 1,n s.t.i j rightarrow ...

單調佇列優化和決策單調性優化

有時狀態轉移方程形如f i j min w i,j 其中l i,j k j,l i,j l i,j 1 如果兩個決策k1,k2滿足f i 1 k1 f i 1 k2 且k1 k2,那麼k1出現後k2就沒用了。維護乙個佇列,按k從小到大存下所有有用的決策,f i 1 k 是單調上公升的。每次加入新決策...

決策單調性優化,玄學 「for me「

例子 ans i max a j sqrt i j j i 大致意思 i位置的答案等於從i前面選乙個j位置,使得表示式最大。那麼,當咱們已經求出 i 的最大值就是在 j 位置的時候,求比 i 大的位置的答案的時候它的範圍應該是怎樣的呢?假設 a j sqrt i j a k sqrt i k j k...