最大2子段和(dp)

2021-10-04 14:44:00 字數 1873 閱讀 2947

這道題是題意是求最大兩子段和

兩邊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,中間用空格分隔。...