浙大2005年机试
动态规划:最大程度子串
//DP
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
struct Node{
int max;
int s;//start
int e;//end
};
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
int k;
while(scanf("%d", &k) && k!=0){
vector <int> a;
bool flag = true;
for(int i=0;i<k;i++){
int t;
scanf("%d", &t);
if(t >= 0)
flag = false;
a.push_back(t);
}// read
if(flag == true){
printf("0 %d %d\n", a[0], a[k-1]);
continue;
}// all is zero
struct Node ans;
ans.max=a[0];
ans.s=a[0];
ans.e=a[0];
struct Node icu;
icu.max=a[0];
icu.s=a[0];
icu.e=a[0];
for(int j=1; j<k; j++){
if(icu.max < 0){
icu.max =a[j], icu.s=a[j], icu.e=a[j];
continue;
}// too litle
icu.max += a[j];
icu.e=a[j];
if(icu.max > ans.max){
ans.max=icu.max;
ans.s=icu.s;
ans.e=icu.e;
}// new max sub string
}
printf("%d %d %d\n", ans.max, ans.s, ans.e);
}//while
return 0;
}