斜率优化DP
主要內(nèi)容
形如這樣的 \(\text{DP}\) 轉(zhuǎn)移方程:
\[dp[i]=\max_{L_i\le j\le R_i}\{dp[j]+val(i,j)\} \]滿足:
-
\({L_i}\) , \({R_i}\) 遞增( 前提條件 )。
-
\(R_i≤i\) ( 轉(zhuǎn)移條件 )。
-
\(val(i,j)\) 與 \(i\) 和 \(j\) 相關(guān)(若只與 \(j\) 有關(guān)可以用單調(diào)隊列優(yōu)化DP)。
我們考慮將其變形:
(這一部分先咕掉了~)
例題:
P4072 [SDOI2016]征途
非常裸的斜率優(yōu)化,但是要注意值域較大,應(yīng)該先將式子化簡,減小運(yùn)算的大小,防止運(yùn)算過程中爆 \(\texttt{long}~\texttt{long}\) !
P2120 [ZJOI2007]倉庫建設(shè)
需要注意的是,這道題可能不用將 \(n\) 的元素全部分配玩(因為末尾可能有連續(xù)的 \(0\) 使不用在 \(n\) 處再分一段)。
因此我們需要再輸出答案之前將答案與末尾所有連續(xù)非 \(0\) 的取 \(\min\) ,保證取到最大值。
取 \(\min\) 代碼:
ans=dp[n]; for(int i=n;i>=1;i--)if(!p[i+1]) ans=minll(ans,dp[i]);else break; printf("%lld\n",ans);總結(jié)
- 上一篇: 鱼松饭的做法大全 鱼松饭最美味的做法三则
- 下一篇: 计算几何初步