码迷,mamicode.com
首页 > 其他好文 > 详细

Maximum sum(最大子段和)

时间:2020-01-31 12:29:11      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:std   scan   最大子段和   span   div   i++   while   lan   col   

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\n",ans);
50     }
51     return 0;
52 }

 

Maximum sum(最大子段和)

标签:std   scan   最大子段和   span   div   i++   while   lan   col   

原文地址:https://www.cnblogs.com/wsy107316/p/12244808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!