斜率優化入門題:
設\(f(x)\)為\(f(x)\)的後綴和,\(t(x)\)為\(t(x)\)的字首和。\(dp(i)\)表示完成到第\(i\)任務的最小代價,轉移:
\(dp(i)=\min \\)
拆掉:我們發現只和\(j\)相關的可以直接預處理,現在的問題是確定了\(i\)如何快速找到乙個\(j\)
令\(y_j=dp(j)+f(j+1)\times(s-t(j))\),\(x_j=f(j+1)\),原式可以寫成:
\[dp(i)= y_j+x_jt(i)
\]轉換一下式子
\[y_j=-t(i)x_j+dp(i)
\]現在問題就變成了確定了乙個\(i\),要快速查詢前面的乙個\(j\)使得\(dp(i)\)最小
把這個東西看成一條直線,就變成了我有一條在平面上平移的斜率為\(-t(i)\)的直線,現在要找乙個點\((x_j,y_j)\)使得過這個點的斜率為\(-t(i)\)的直線的截距盡量小。
藍線:斜率為\(-t(i)\)的線很明顯,可以看做有一條在\(y\)負半軸無限遠處有一條直線慢慢上移(截距慢慢變大),這條直線突然經過乙個我們集合內的點時,它此時的截距就是最小的截距。很顯然,這個點一定在凸包上面,而且這個點左右兩邊的斜率一定是左邊更小,右邊更大(斜率是負數)。紫點:\((x_j,y_j)\)
動態維護一下凸包就好了。
//@winlere
#include#include#include#includeusing namespace std; typedef long long ll;
inline int qr()
int n,s;
const int maxn=3e5+5;
int ti[maxn],fi[maxn];
ll st[maxn],sf[maxn];
ll x[maxn],y[maxn],q[maxn],dp[maxn];
int cnt;
inline ll getval(const int&i,const int&j)
inline bool chek0(const int&i,const int&j,const ll&k)
inline bool chek(const int&i,const int&j,const ll&k)
inline int lookup(const ll&k)
return q[ret];
}int main()
cout
\[dp(i,j)=\min\
\\sum(i)=\sigma_^it_j-dis(1,j)
\]拆開\(j,k\)直接變成乙個斜率優化的套路式。
\(x_k=k,y_k=dp(i-1,k)+sum(k)\)
原式變為:
\[y_k=t_jx_k+(dp(j)-j\times dis(1,j)+sum(j))
\]查詢乙個截距最小值。好像要單調佇列維護。查到哪個\(k\)轉移套到原式就好了。
不過這裡複雜度貌似\(o(n)(k\le 100)\)
//@winlere
#include#include#include#include#includeusing namespace std; typedef long long ll;
inline ll qr()
const int maxn=1e5+5;
int n,m,p;
int dis[maxn];
ll sumd[maxn];
ll sumdata[maxn];
ll x[maxn];
ll y[maxn];
ll dp[101][maxn];
struct node
inline bool operator
q.clear();
for(register int i=1;i<=m;++i)
}cout瓦努霍格木茨格蘭芬多神威無敵無雙超神大聚聚yyb的部落格
學習筆記 斜率優化
太久沒碰過這個玩意了,於是它就變成學習筆記了。一般來說,斜率優化的dp會比其它的dp得到轉移方程要簡單一點點。通式大概是 f i a i b j c i d j 也就是說,這種dp和單調佇列不同的一點是有同時和 i,j 有關的項,這時候就需要用到斜率優化。拿道題目來講可能效果更好一些。設字首和為 s...
學習筆記 斜率優化
感謝cxl的部落格,講得很清楚 斜率優化的特點在於可以在權值 w i,j 中可以找到一項 f i times g j 的項,其中 j 是決策點,這時我們不能用單獨的單調佇列來優化因為這裡沒有單調性。決策單調性的定義 對於形如 f i min f j w j,i 的狀態轉移方程,記 p i 為 f i...
斜率優化學習筆記
目錄第二類斜率優化 注意事項 q a 例題 hnoi玩具裝箱 由題意我們可以馬上得到dp方程 dp i displaystyle min sum x 為字首和 很可惜,這個解法是 o n 2 的,無法ac 但是可以在當年騙很多分?接下來的文章中我們會用幾個簡稱 f i sum i i c 1 l 優...