http://acm.hdu.edu.cn/showproblem.php?pid=1231
状态转移方程:dp[i] = max(dp[i - 1] + a[i], a[i])而且起点实际也是一个dp
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n,a[10010],dp[10010],id[10010];
int main(){
// freopen("in.txt", "r", stdin);
while(scanf("%d",&n) != EOF && n){
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
dp[0] = 0, id[0] = 1;
for(int i=1; i<=n; i++){
if(dp[i - 1] > 0){
dp[i] = dp[i - 1] + a[i];
id[i] = id[i - 1];
}
else{
dp[i] = a[i];
id[i] = i;
}
}
int ans = -1e9, en = n;
for(int i=1; i<=n; i++)
if(ans < dp[i]){
ans = dp[i];
en = i;
}
if(ans < 0)
cout << 0 << " " << a[1] << " " << a[n] << endl;
else
cout << ans << " " << a[id[en]] << " " << a[en] << endl;
}
return 0;
}