HDU 1231 最大连续子序列 --- 入门DP
题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同。
/* HDU 1231 最大连续子序列 --- 入门DP */ #include <cstdio> #include <cstring> int dp[10005]; 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) == 1 && n){ for (int i = 0; i < n; ++i){ scanf("%d", dp + i); }//for(i) start = lst = fst = maxSum = dp[0]; for (int i = 1; i < n; ++i){ ai = dp[i]; if (dp[i - 1] >= 0){ dp[i] = dp[i - 1] + 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 < 0){ printf("0 %d %d\n", dp[0], dp[n - 1]); } else{ printf("%d %d %d\n", maxSum, fst, lst); } } return 0; }