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(最大子段和)