1. 程式人生 > >2018.12.31 NOIP訓練 czy的後宮6(線性dp)

2018.12.31 NOIP訓練 czy的後宮6(線性dp)

傳送門
題意簡述:給一個 n n 個數的數列,你可以把它最多分成 m m 段,求每段數之和的最大值的最小值,以及滿足這個最小值的時候劃分數列的方案數。


思路:第一個問題是二分經典問題,不妨設其答案為 l

i m lim
現在考慮 d p dp 第二個問題。
我們定義狀態 f
i , j f_{i,j}
表示把前 i i 個數劃成 j
j
段且滿足題意的方案數。
那麼就有狀態轉移方程: f i , j = p s u m ( p , i ) l i m f p 1 , j 1 f_{i,j}=\sum_{p}^{sum(p,i)\le lim}f_{p-1,j-1} ,然後發現從左到右每個位置對應的 p m i n p_{min} 是單調不降的,於是我們用類似雙端佇列的思想維護一下等式右邊的和即可。
程式碼