HDU 1231 最大連續子序列 邏輯模擬

傳送門:HDU 1231 最大連續子序列

分析:
邏輯模擬,註釋見代碼。

#include<stdio.h>
#include<string.h>
int a[10000];
int main() {
    int n,fir,end,i,j,max,sum=0,re,index;
    while((scanf("%d",&n)) && n) {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        fir = a[0];
        end = a[0];
        max = a[0];
        re = 0;
        for(i=0;i<n;i++) {
            if(re<0) {  // 小於0了,則重新開始記錄子序列(比不選任何一個還要差)
                re = a[i];
                index = a[i]; // 記錄區間的開始值
            }
            else
                re += a[i];
            if(re>max) { // 只有子序列的和大於max才更新相應的首尾
                max = re; // 更新最大子序列的和
                end = a[i]; // 更新區間的結束值
                fir = index; // 更新區間的開始值
            }
        }
        if(max<0)
            printf("0 %d %d\n",a[0],a[n-1]);
        else
            printf("%d %d %d\n",max,fir,end);
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章