傳送門: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;
}