题目链接:http://poj.org/problem?id=2479
题目大意:给出一个数组,求两端不交叉的子序列和的最大值。我看到这道题只能想到n^2的程序。。。肯定超时,然后看的题解,唉。。但是用的时间还是比较多
AC代码:
#include<stdio.h>
int main()
{
int t;
int mm[50005];
int r[50005],l[50005];
scanf("%d",&t);
while(t--)
{
int n,sum=0,maxn=-99999999,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&mm[i]);
for(i=0;i<n;i++)
{
sum=sum>0?sum+mm[i]:mm[i];
if(sum>maxn)maxn=sum;
r[i]=maxn;
}
for(i=n-1,maxn=-99999999,sum=0;i>=0;i--)
{
sum=sum>0?sum+mm[i]:mm[i];
if(sum>maxn)maxn=sum;
l[i]=maxn;
}
maxn=-99999999;
for(i=0;i<n-1;i++)
if(r[i]+l[i+1]>maxn)maxn=r[i]+l[i+1];
printf("%d",maxn);
if(t)printf("\n");
}
return 0;
}
AC截图: