經典區間dp:最大m段和
「最大連續和問題」是最大m段和問題的乙個特例,其實是當m=1的一種特殊情況。
oj題目:
#include#include
#define inf 0x3f3f3f3f
using
namespace
std;
const
int maxn = 1000000 + 5
;typedef
long
long
ll;int
a[maxn];
ll dp[maxn];
ll maxn[maxn];
/*dp[i][j] = max(dp[i][j-1]+a[j], max(dp[i-1][k])+a[j]) (i-1 <= k < j)
下面的**進行了兩個很重要的優化:1.滾動陣列,空間減少一維 2. 通過動態維護上一行中[i-1,j)的最大值,省去k的一重迴圈
*/int
main ()
for(int j=0; j<=n; j++) maxn[j] = dp[j] = 0
;
ll t;
for(int i=1; i<=m; i++) }}
printf(
"%lld\n
", t);
}return0;
}
參考:
NYOJ 742 (多段子串和)
題目 給你乙個序列 s1,s2,s3,s4 sx,sn 1 x n 1,000,000,32768 sx 32767 我們定義 sum i,j si sj 1 i j n 現在給你乙個 m 8 m 0 m sum i1,j1 sum i2,j2 sum i3,j3 sum im,jm 我們規定他是不...
最大m子段和
最大m子段和問題 給定由n個整數 可能為負 組成的序列a1 a2 a3.an,以及乙個正整數m,要求確定序列的m個不想交子段,使這m個子段的總和最大!設b i,j 表示陣列a的前j項中i個子段和的最大值,並且第i個子段包含a j 1 i m,i j n 則所求的最優值為maxb m,j m j n ...
最大m子段和
51nod 1052 題意描述 給定陣列a,長度為n。給定整數m,求不相交的m段字段和的最大值。當m 1 時 該問題就是最大子段和問題。設dp i 為以a i 結尾的最大子段和,當我們考慮dp i 的時候如果dp i 1 0那麼肯定把a i 接在後面最優,否則,取a i 最優。得到 dp i max...