首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

杭电1003解决方法

2012-02-26 
杭电1003#includestdio.hint main(){int t,i,j,k,a[100000],b[100000],beg,endlong n,sum,maxscanf(%

杭电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");

热点排行