Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 28485 | Accepted: 8713 |
Description
Input
Output
Sample Input
1 10 1 -1 2 2 3 -3 4 -4 5 -5
Sample Output
13
Hint
Huge input,scanf is recommended.
Source
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=50010; int n,num[N]; int dpl[N],dpr[N]; int main(){ //freopen("input.txt","r",stdin); int t; scanf("%d",&t); while(t--){ scanf("%d",&n); scanf("%d",&num[0]); dpl[0]=num[0]; for(int i=1;i<n;i++){ scanf("%d",&num[i]); if(dpl[i-1]>=0) //从左向右求最大值 dpl[i]=dpl[i-1]+num[i]; else dpl[i]=num[i]; } int maxv=num[n-1],ans=-999999; dpr[n-1]=num[n-1]; for(int i=n-1;i>=1;i--){ if(dpr[i]>=0) //从右向左求最大值 dpr[i-1]=dpr[i]+num[i-1]; else dpr[i-1]=num[i-1]; if(maxv<dpr[i]) maxv=dpr[i]; if(ans<maxv+dpl[i-1]) ans=maxv+dpl[i-1]; } printf("%d\n",ans); } return 0; }