最开始使用递归DP解,stack overflow。化简了一些,复杂度为O(n)就过了。
#include <stdio.h> int main() { int case_n, n; int i, j, tmp; int beg, end, sum, max_sum; int number; scanf("%d", &case_n); for (i=1; i<=case_n; i++) { scanf("%d", &n); beg = 0; tmp = 0; end = 0; sum = 0; max_sum = -1001; for (j=0; j<n; j++) { scanf("%d", &number); sum += number; if (sum > max_sum) { max_sum = sum; beg = tmp; end = j; } if (sum < 0) { sum = 0; tmp = j+1; } } printf("Case %d: ", i); printf("%d %d %d ", max_sum, beg+1, end+1); if (i != case_n) printf(" "); } return 0; }