您的位置:首页 > 其它

HDOJ1003 - Max Sum

2013-04-03 00:04 330 查看
题目大意:和1231一样,求最大连续子序列和,只是这个题目是要求求的是最大连续子序列和的首元素位置和尾元素位置。

题解:直接把1231的代码稍微修改一下就行了。。。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 100005
typedef struct
{
long x,y;
} NODE;
NODE path[MAXN];
long d[MAXN],a[MAXN];
int main(void)
{
long i,n,maxs,l,r,T,p;
scanf("%ld",&T);
p=1;
while(T--)
{
scanf("%ld",&n);
for(i=0; i<n; i++)
scanf("%ld",&a[i]);
memset(d,0,sizeof(d));
d[0]=a[0];
maxs=d[0];
l=0;
r=0;
for(i=1; i<n; i++)
{
if(d[i-1]<0)
{
d[i]=a[i];
path[i].x=i;
path[i].y=i;
if(d[i]>maxs)
{
maxs=d[i];
l=i;
r=i;
}
}
else
{
d[i]=d[i-1]+a[i];
path[i].x=path[i-1].x;
path[i].y=i;
if(d[i]>maxs)
{
maxs=d[i];
l=path[i].x;
r=path[i].y;
}
}

}
printf("Case %ld:\n",p++);
printf("%ld %ld %ld\n",maxs,l+1,r+1);
if(T) printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: