1305:Maximum sum

Maximum sum

股票买卖 差不多。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=50005;
 7 int a[N],b[N][2],c[N][2];
 8 
 9 int main(){
10     int t,n;
11     cin>>t;
12     while(t--){
13         cin>>n;
14         for(int i=1;i<=n;i++)scanf("%d",a+i);
15         b[0][0]=c[n+1][0]=0;
16         b[0][1]=c[n+1][1]=-N;
17         for(int i=1;i<n;i++){
18             b[i][0]=max(b[i-1][0],0)+a[i];//b[i][0]表示前i个数中选择包括a[i]在内的若干个连续数的最大值
19             b[i][1]=max(b[i-1][1],b[i][0]);//b[i][1]表示前i个数中选择若干个连续数的最大值
20         } 
21         for(int i=n;i>1;i--){
22             c[i][0]=max(0,c[i+1][0])+a[i];
23             c[i][1]=max(c[i+1][1],c[i][0]);
24         }
25         int ans=-N;
26         for(int i=1;i<n;i++)
27             ans=max(ans,b[i][1]+c[i+1][1]);
28         cout<<ans<<endl;
29     }
30     return 0;
31 }

 

posted @ 2021-08-23 14:16  Rekord  阅读(287)  评论(0编辑  收藏  举报