這道題是題意是求最大兩子段和
兩邊dp,一遍從左一遍從右,表示前i和後i的最大子段值,最後查詢left[i]+right[i+1]最大值即可
很基礎的一道題,看**吧,還有一點要注意,這裡要用scanf和printf,用cin cout會超時
#include
#include
#include
#include
#include
using
namespace std;
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
int a[
50010
],l[
50010
],r[
50010];
intmain()
//這裡處理一下,保證當前值是最大子段的和(比如當前值為負數,他的值雖然大於0但是最大值是l[i-1])
for(
int i=
1;i) l[i]
=max
(l[i-1]
,l[i]);
r[n-1]
= a[n-1]
;for
(int i=n-
2;i>=
0;i--
)for
(int i=n-
2;i>=
0;i--
)//同理
r[i]
=max
(r[i]
,r[i+1]
);maxx =
-9999999
;for
(int i=
0;i1;i++
) maxx =
max(maxx,l[i]
+r[i+1]
);printf
("%d\n"
,maxx);}
return0;
}
DP最大M子段和
給定n個數求這n個數劃分成互不相交的m段的最大m子段和。經典的動態規劃優化的問題。設f i,j 表示前i個數劃分成j段,且包括第i個數的最大m子段和,那麼有dp方程 f i,j max k j 1 i 1 也就是說第i個數要麼自己劃到第j段,要麼和前乙個數一起劃到第j段裡面,轉移是o n 的,總複雜...
DP 最大連續子段和
最大連續子段和 hdu 1003 1.問題描述 給定一串整數,例如 6 1 5 4 7,求最大連續子段和?2.演算法介紹 此題不能暴力,o n 2 的時間複雜度必然超時。考慮如下演算法 設mi表示前i個整數包含第i個整數的最大連續子段和。sum i,j 表示第i個整數到第j個整數的和,最大連續子段和...
1052 最大M子段和 (dp)
n個整數組成的序列a 1 a 2 a 3 a n 將這n個數劃分為互不相交的m個子段,並且這m個子段的和是最大的。如果m n個數中正數的個數,那麼輸出所有正數的和。例如 2 11 4 13 5 6 2,分為2段,11 4 13一段,6一段,和為26。input 第1行 2個數n和m,中間用空格分隔。...