dp问题
//
// main.cpp
// A1007
//
// Created by Jacky Roth on 2019/2/10.
// Copyright © 2019 Jacky Roth. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
int num[10010];
int dp[10010];
int main(int argc, const char * argv[]) {
int n;
scanf("%d",&n);
bool flag=0;
for (int i=0; i<n; i++) {
scanf("%d",&num[i]);
if (num[i]>=0) {
flag=1;
}
}
if (flag==0) {
printf("0 %d %d\n",num[0],num[n-1]);
}else{
int first=0,last=0;
dp[0]=num[0];
for (int i=1; i<n; i++) {
dp[i]=max(dp[i-1]+num[i],num[i]);
}
for (int i=0; i<n; i++) {
if (dp[i]>dp[last]){
last=i;
}
}
int count=dp[last];
for (int j=last; j>=0; j--) {
count-=num[j];
if (count==0) {
first=j;
break;
}
}
printf("%d %d %d\n",dp[last],num[first],num[last]);
}
return 0;
}