杭电1003
#include<stdio.h>
int main()
{
int t,i,j,k,a[100000],b[100000],beg,end;
long n,sum,max;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d",&n);
for(j=0;j<n;j++)scanf("%d",&a[j]);
k=0;
while(a[k]<0)k++;
if(k>=n)
{ for(max=a[0],beg=1,end=1,j=0;j<n;j++)
if(a[j]>max){max=a[j];beg=j+1;end=j+1;}
}
else if (k==n-1)
{max=a[k];
beg=end=n;}
else
if(k<n-1)
{
beg=k+1;
sum=0;
for(j=k;j<n;j++)
{
sum+=a[j];
b[j]=sum;
}
for(max=b[k],j=k;j<n;j++)
if(b[j]>max){max=b[j];end=j+1;}
}
printf("Case %d: \n",i);
printf("%d %d %d\n\n",max,beg,end);
}
system("pause");
return 0;
}
那位大神帮我看一下啊,为什么会有错误啊
我的测试数据都可以通过啊,崩溃啦
[解决办法]
注意循环输入
测试数据对不一定能AC
另外可以参考下 动态规划-最大子数组和
[解决办法]
我没做过acm的题,不过他们说输出对了,不一定就对
[解决办法]
请试以下输入:
3 0 0 0
3 -1 2 -3
建议重新考虑算法。
还要修改以下语句:
printf("Case %d:\n",i); //多了一个空格 printf("Case %d: \n",i);
printf("%d %d %d\n",max,beg,end); //printf("%d %d %d\n\n",max,beg,end);
if (i<t) printf("\n"); //加。最后一个Case后不能有空行
}
//删system("pause");