最大子段和也要讲。。。。
大侠,出来罗
2010-07-20 17:20
大侠,出来罗
2010-07-20 19:46
2010-07-20 19:53
程序代码:
#include <stdio.h>
int num[100001];
int main()
{
int l,n,i,sum,ps,pe,max,j,t=1,flag;
scanf("%d",&l);
while(l--)
{
flag=1;
max=-2000;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
if(num[i]>0)
flag=0;
else
{
if(flag&&num[i]>max)
{
ps=pe=i;
max=num[i];
}
}
}
if(!flag)
{
max=-1;
sum=j=0;
for(i=0;i<n;i++)
{
sum+=num[i];
if(sum>max)
{
ps=j;
pe=i;
max=sum;
}
else if(sum<0)
{
sum=0;
j=i+1;
}
}
}
if(t>1)
printf("\n");
printf("Case %d:\n",t);
printf("%d %d %d\n",max,ps+1,pe+1);
t++;
}
return 0;
}
2010-07-20 19:58
2010-07-20 21:13
2010-07-20 21:15
这题看来只有救世主才能看出错误了,呵呵
2010-07-20 21:51
2010-07-20 22:10
程序代码:#include <stdio.h>
int main()
{
int a[100002]={0},n,m,flag=0;
long N,yisum=-10001,j,i,p1,p2,ersum=0,k=0,position;
scanf("%d",&n);
m=n;
while(n--)
{
flag=0;
if(m>=0&&m<=20)
{
scanf("%ld",&N);
for(j=0;j<N;j++)
scanf("%d",&a[j]);
for(j=0;j<N;j++)
if(a[j]>0)
{
flag=1;
break;
}
if(!flag)
{
yisum=-999999999;
for(i=0;i<N;i++)
if(yisum<a[i])
{
yisum=a[i];
position=i;
}
goto A;
}
for(j=0;j<N&&flag;j++)
{
ersum=ersum+a[j];
if(ersum<0)
{
ersum=0;
continue;
}
else
if(yisum<ersum)
{
yisum=ersum;
p2=j;
}
}
ersum=0;
for(k=p2;k>=0;k--)
{
ersum=ersum+a[k];
if(ersum==yisum)
p1=k;
}
A:
printf("Case %d:\n",m-n);
if(flag)
printf("%ld %ld %ld\n",yisum,p1+1,p2+1);
else
printf("%ld %ld %ld\n",yisum,position+1,position+1);
yisum=-10001;ersum=0;
for(j=0;j<N;j++)
a[j]=0;
}
if(n)
printf("\n");
}
return 0;
}
2010-07-20 22:12
想不到又是这么水的错误,真感谢你为我找出来
2010-07-21 07:49