頭條一面第二次gg,肚子不疼了,人蠢了。
題目:給乙個陣列,求出兩段 不相鄰也不相交的子段和 之和 最大。
如果是單段,那麼就是乙個普通的最大子段和問題。
然而分成了兩段,也是簡單的一批
兩次遍歷求出從字首和字尾的最大子段和,即1到n每個位置的最大子段和,以及n到1每個位置的最大子段和,這樣就可以分區間考慮了。
最後一次,遍歷列舉整個陣列,求第i位為區間間隔的l【i-1】+r【i+1】的最大值。
#include
using namespace std;
const
int maxn=
1e5+7;
int l[maxn]
,a[maxn]
,r[maxn]
,n;int
main()
sum=
0,tmp=
-99999999
;for
(int i=n-
1;i>=0;
--i)
int ans=
-9999999
;for
(int i=
1;i++i) ans=
max(ans,l[i-1]
+r[i+1]
);printf
("%d\n"
,ans)
;}
環狀兩段最大子段和
首先考慮鏈狀的情況,也就是鏈狀 p.s 表示使用的子段 可以考慮用中途相遇法,用 g i 表示以 ii 為結尾分界線,之前最大子段和,以 h i 表示以 ii 為結尾分界線,之後最大子段和 那麼答案也就是 g i h i 1 不相交,所以要 1 如果是環狀的呢?俗話說得好正難則反,雖然不知道三段的怎...
最大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...