题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同。
/* HDU 1231 最大连续子序列 --- 入门DP */
#include <cstdio>
#include <cstring> int dp[]; int main()
{
#ifdef _LOCAL
freopen("D:\\input.txt", "r", stdin);
#endif
int n;
int maxSum, fst, lst;
int start, ai; //start用于记录起始位置,ai表示a[i],这样可以省去一个数组
while (scanf("%d", &n) == && n){
for (int i = ; i < n; ++i){
scanf("%d", dp + i);
}//for(i) start = lst = fst = maxSum = dp[];
for (int i = ; i < n; ++i){
ai = dp[i];
if (dp[i - ] >= ){
dp[i] = dp[i - ] + dp[i];
}
else{
start = dp[i];
} if (dp[i] > maxSum){
maxSum = dp[i];
fst = start;
lst = ai;//这是dp[i]已经更新了,不再是原来的a[i],因此需要提前记录下来
}
}//for(i)
if (maxSum < ){
printf("0 %d %d\n", dp[], dp[n - ]);
}
else{
printf("%d %d %d\n", maxSum, fst, lst);
}
} return ;
}