HDU 1003

来源:互联网 发布:javascript权威 编辑:程序博客网 时间:2024/05/15 07:23
  1. #include <iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     int j,i,k,n,m,t;  
  6.     int a[100002];  
  7.     scanf("%d",&t);  
  8.     for (j=1;j<=t;j++)  
  9.     {  
  10.         scanf("%d",&n);  
  11.         for (i=0;i<n;i++)  
  12.         {  
  13.             scanf("%d",&a[i]);  
  14.         }  
  15.         int sum=0,maxsum=-1001,first =0, last = 0, temp = 1;  
  16.         for (i=0;i<n;i++)  
  17.         {  
  18.             sum += a[i];  
  19.             if (sum > maxsum)  
  20.             {  
  21.                 maxsum = sum;first = temp;last = i+1;  
  22.             }  
  23.             if (sum < 0)  
  24.             {  
  25.                 sum = 0;temp = i+2;  
  26.             }  
  27.         }  
  28.   
  29.         printf("Case %d:\n%d %d %d\n",j,maxsum,first,last);  
  30.         if (j!=t)  
  31.         {  
  32.             printf("\n");  
  33.         }  
  34.     }  
  35.       
  36.     return 0;  

  1. }  
  2. 随着i不断更新maxsum的值,如果为负数,加上下一个数不论这个数是正负,和值必定比这个数下,所以置前负值为0.若全为负数,则只需保留当前最大的负数即可。

0 0