| ||||||||||
| 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!In Reply To:为什么总是runtime error! Posted by:Just_do_it at 2008-05-22 09:21:24 > 刚刚用最大子段和写了个求解maximum sum的程序,思路如下:
> 用pos表示的位置作为分水岭,求包括pos在内的前一段的最大子段和,再求pos后面的最大子段和两个相加得到一个备选的maximum sum,从pos在1-count-1范围内的每个取值得到的备选maximum sum中挑选最大的就是最后的解
> 代码如下:希望牛人帮忙看看为什么总是runtime error!小弟先谢谢了!
>
> #include <stdio.h>
> int number[5001],p1[5001],p2[5001];
>
> int main(int argc, char* argv[])
> {
> int i,j,pos,pre,last,ms,count,times;
> scanf("%d",×);
> i = 0;
> while(i < times)
> {
> scanf("%d",&count);
> for(j = 1;j <= count;j++)
> scanf("%d",&number[j]);
>
> if(count == 2)
> ms = number[1] + number[2];
> else
> {
> p1[1] = number[1];
> for(j = 2;j <= count - 1;j++)
> {
> if(p1[j - 1] > 0)
> p1[j] = p1[j - 1] + number[j];
> else
> p1[j] = number[j];
> }
>
> ms = -2000;
> for(pos = 1;pos <= count - 1;pos++)
> {
> pre = p1[1];
> for(j = 1;j <= pos;j++)
> {
> if(pre < p1[j])
> pre = p1[j];
> }
>
> p2[pos + 1] = number[pos + 1];
> last = p2[pos + 1];
>
> for(j = pos + 2;j <= count;j++)
> {
> if(p2[j - 1] > 0)
> p2[j] = p2[j - 1] + number[j];
> else
> p2[j] = number[j];
>
> if(last < p2[j])
> last = p2[j];
> }
>
> if(ms < pre + last)
> ms = pre + last;
> }
> }
> printf("%d\n",ms);
> i++;
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator