动态规划题
注意全为负数的情形,输出为0 序列第一个值 序列最后一个值;
注意序列由负数和0组成时,输出为0 0 0;
//
// main.cpp
// PATA1007
//
// Created by Phoenix on 2018/1/31.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
const int maxn = 10010;
int num[maxn];
bool flag = false;
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &num[i]);
}
int start = -1, begin = 0, end = -1, MAX = 0,sum = 0;
for(int i = 0; i < n; i++) {
if(num[i] == 0) flag = true;
if(num[i] > 0){
sum += num[i];
if(sum > MAX) {
MAX = sum;
end = num[i];
start = num[begin];
}
}else if(num[i] <= 0 && num[i] + sum >= 0) {
sum += num[i];
}else{
sum = 0;
begin = i + 1;
}
}
if(MAX >0){
printf("%d %d %d", MAX, start, end);
}else{
if(flag == true) printf("0 0 0\n");
else printf("0 %d %d", num[0], num[n - 1]);
}
return 0;
}