大致思路:
求出每个位置的左边的最大数字串值和右边的最大数字串值之和,最大的和值为最终答案。
具体思路:
在输入的同时先求出每次输入时当前最大数字串值,并保存起来到对应的max【i】中,然后再从右往左以此求出到当前位置的右边数字串的最大数字串值,并与此位置左边最大数字串值加起来,所得之和最大的即为最终答案。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int t;
int n;
int MINNUM = 1<<31;
int max[50005];
int a[50005];
int sum;
int temp;
int ans;
scanf("%d",&t);
while(t--)
{
sum=0;
temp=MINNUM;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
if(sum>temp)
temp=sum;
max[i]=temp;
if(sum<0)
sum=0;
}
ans=MINNUM;
temp=MINNUM;
sum=0;
for(int i=n-1;i>0;i--)
{
sum+=a[i];
if(sum>temp)
temp=sum;
if(sum<0)
sum=0;
if(temp+max[i-1]>ans)
ans=temp+max[i-1];
}
printf("%d\n",ans);
}
}