1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include <stdio.h> #define MAX_LEN 100000UL
int max_subsq(int *array, unsigned int size, unsigned int *start, unsigned int *end) { int max_sum = -2000, sum = 0; int curstart = *start = 0; unsigned int i; for (i = 0; i < size; i++){ if (sum < 0){ sum = array[i];//丢弃之前的子串 curstart = i; //将当前位置作为新的起始位置 } else { sum += array[i]; } if (sum > max_sum){ max_sum = sum; *start = curstart; *end = i; } } return max_sum; }
int main(void) { int A[MAX_LEN]; int i = 0, round, n, max; unsigned int start, end; freopen("/Users/RichardLu/Code/C++/Algorithm/largeNumberSort/largeNumberSort/largeNumberSort/testcase.in", "r", stdin); freopen("/Users/RichardLu/Code/C++/Algorithm/largeNumberSort/largeNumberSort/largeNumberSort/testcase.out", "w", stdout); scanf("%d", &round); while (i++ < round) { scanf("%d", &n); for (int j = 0; j < n; j++){ scanf("%d", &A[j]); } max = max_subsq(A, n, &start, &end); printf("Case %d:\n", i); printf("%d %d %d\n", max, start + 1, end + 1); if (i != round) printf("\n"); } fclose(stdin); fclose(stdout); return 0; }
|