Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:我的程序RUNTIME ERROR,是什么回事?Runtime Error是什么原因造成的?In Reply To:我的程序RUNTIME ERROR,是什么回事?Runtime Error是什么原因造成的? Posted by:acmgotogether at 2007-06-06 22:35:30 > #include<iostream.h> > #include<stdio.h> > #define Min -10001 > #define Max 10001 > int NEG_INF = 0x80000000; > int POS_INF = 0x7fffffff; > int a[5001];//数据 > int b[5001];//记录正负值 > int x[5001];//当前最优路径 > int r[5001];//当前路径 > > int MaxSumWithR(int * a, int n) > { > int i,j; > > for(j=1;j<=n;j++) > { > r[j]=0; > x[j]=0; > } > int sum=0; > int s=0; > for(i=1;i<=n;i++) > { > if(s>0) > { > s+=a[i]; > r[i]=1; > } > else//s<=0 > { > s=a[i]; > for(j=1;j<=n;j++) > r[j]=0; > r[i]=1; > } > if(sum<s) > { > sum=s; > for(j=1;j<=n;j++) > x[j]=r[j]; > } > } > return sum; > } > > int MaxSum(int * a, int begin, int end)//求a[begin...end]的最大和 > { > int n=end-begin+1; > int i; > int s=0; > int sum=NEG_INF; > for(i=begin;i<=end;i++) > { > if(s>0) > { > s+=a[i]; > } > else//s<=0 > { > s=a[i]; > } > if(sum<s) > { > sum=s; > } > } > return sum; > } > > int MaxNum(int s1,int s2, int s3) > { > int s4 = s1>s2 ? s1:s2; > int s = s4>s3? s4:s3; > return s; > } > > int main() > { > // cout<<NEG_INF<<endl; > int i,k,times; > int T; > scanf("%d",&T); > > printf("\n"); > for(times=1;times<=T;times++) > { > > int sum=0; > int N; > cin>>N; > for(i=1;i<=N;i++) > { > scanf("%d",&a[i]); > if(a[i]>0) > { > b[i]=1;//正数表示为1,0或负数表示为0 > } > } > int IsAllPositive=0; > int IsAllNegative=0; > int pos_count=0; > int neg_count=0; > for(i=1;i<=N;i++) > { > if(b[i]==1) > pos_count++; > else > neg_count++; > } > if(pos_count==N)//全部是正数 > { > for(i=1;i<=N;i++) > sum+=a[i]; > printf("%d\n\n", sum); > } > > else if(neg_count==N)//全部是负数 > { > int s1=Min; > int t1=0; > int s2=Min; > for(i=1;i<=N;i++) > { > if(a[i]>s1) > { > s1=a[i]; > t1=i; > } > } > for(i=1;i<=N;i++) > { > if(a[i]>s2 && i!=t1) > { > s2=a[i]; > } > } > sum=s1+s2; > printf("%d\n\n", sum); > } > > else//正负数都有 > { > int sum1=MaxSumWithR(a,N);//x[i]==0的为未访问的 > k=0; > int begin1;//最大子串的开始位置 > int end1;//最大子串的结串位置 > for(i=1;i<=N;i++) > { > if(x[i]==1) > { > if(k==0) > { > begin1=i; > } > k++; > } > } > end1=begin1+k-1; > // cout<<"begin1:"<<begin1<<endl; > // cout<<"end1:"<<end1<<endl; > if(begin1==end1)//只有一个正数的情况,即最大子串只有一个元素 > { > int max=Min; > for(i=1;i<=N;i++) > { > if(i!=begin1 && a[i]>max) > max=a[i]; > } > sum=sum1+max; > printf("%d\n\n", sum); > } > else > { > int sum2=NEG_INF; > int sum3=NEG_INF; > int sum4=0; > if(begin1!=1) > { > sum2=MaxSum(a,1,begin1-1); > } > if(end1!=N) > { > sum3=MaxSum(a,end1+1,N); > } > for(i=begin1;i<=end1;i++)//找出最小的负数 > { > if(a[i]<sum4) > sum4=a[i]; > } > sum4=-sum4; > // cout<<"sum1:"<<sum1<<endl; > // cout<<"sum2:"<<sum2<<endl; > // cout<<"sum3:"<<sum3<<endl; > // cout<<"sum4:"<<sum4<<endl; > int sum5=MaxNum(sum2, sum3, sum4); > sum=sum1+sum5; > printf("%d\n\n", sum); > // cout<<"sum5:"<<sum5<<endl; > // cout<<"sum :"<<sum<<endl; > } > } > > }//for > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator