天天看點

杭電OJ(HDOJ)1003題:Max Sum(動态規劃)

題意:

先給出測試用例的次數T(1<=T<=20),現輸入一個正整數N(1<=N<=100000),接着是N個數a( -1000 <=a<=1000)。對于每一行先輸出Case #:換行輸出整數序列輸出最大連續子序列的和以及開始和結束的下标。

示例輸入:

2

5 6 -1 5 4 -7

7 0 6 -1 1 -6 7 -5

示例輸出:

Case 1:

14 1 4

Case 2:

7 1 6

解決方案:

注意輸出的格式,最後一個Case沒有換行,基本與1231題(點選打開連結)一樣。

#include"stdio.h"
main()
{
    int max,start,temp,end,sum,i,j,t,n,a[100001];
    scanf("%d",&t);
    for(j=1;j<=t;j++)
    {
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d",a+i);
        max=a[1];
        sum=0;
        temp=start=end=1;    
        for(i=1;i<=n;i++)
        {
            sum+=a[i];
            if(sum>max)    
            {
                max=sum;
                start=temp;
                end=i;
            }
            if(sum<0)    
            {
                sum=0;
                temp=i+1;
            } 
        }
    
        printf("Case %d:\n",j);
        printf("%d %d %d\n",max,start,end);
        if(j<t) putchar(10);
    }
}
           

使用貪心寫一個,結果一樣,但送出失敗,可能哪裡有邏輯錯誤,請指出。

繼續閱讀