Maximum sum(最大子段和)

Posted wsy107316

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maximum sum(最大子段和)相关的知识,希望对你有一定的参考价值。

Maximum sum

技术图片

 

 AC_Code

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 #include <string>
 6 #include <cmath>
 7 #include <cstdlib>
 8 #include <algorithm>
 9 using namespace std;
10 typedef long long ll;
11 const int maxn = 50010;
12 const ll inf=0x3f3f3f3f;
13 
14 int a[maxn];
15 int leftt[maxn],rightt[maxn], leftmax[maxn],rightmax[maxn];
16 
17 int main()
18 {
19     int t;
20     scanf("%d",&t);
21     while( t-- ){
22         int n;
23         scanf("%d",&n);
24         for(int i=1;i<=n;i++){
25             scanf("%d",&a[i]);
26         }
27         leftt[1]=a[1];
28         leftmax[1]=a[1];
29         rightt[n]=a[n];
30         rightmax[n]=a[n];
31 
32         for(int i=2;i<=n;i++){
33             leftt[i]=max(leftt[i-1]+a[i], a[i]);
34         }
35         for(int i=1;i<=n;i++){
36             leftmax[i]=max(leftmax[i-1],leftt[i]);
37         }
38         for(int i=n-1;i>=1;i--){
39             rightt[i]=max(rightt[i+1]+a[i],a[i]);
40         }
41         for(int i=n-1;i>=1;i--){
42             rightmax[i]=max(rightt[i],rightmax[i+1]);
43         }
44 
45         int ans=-inf;
46         for(int i=2;i<=n;i++){
47             ans=max(ans,leftmax[i-1]+rightmax[i]);
48         }
49         printf("%d
",ans);
50     }
51     return 0;
52 }

 

以上是关于Maximum sum(最大子段和)的主要内容,如果未能解决你的问题,请参考以下文章

D. Maximum Sum on Even Positions(最大子段和)

Codeforces 1373D - Maximum Sum on Even Positions (最大子段和)

Maximum sum(poj 2479)

poj 2479 maximum sum

线段树维护区间最大子段和

最大连续子段和