面试题31(连续子数组的最大和)
题目链接:http://ac.jobdu.com/problem.php?pid=1372
题意:最大连续子数组和并输出下表
思路:利用动态规划的思想,以i结尾的最大连续子数组中的最大值就是结果。
code:
1 #include <cstdio> 2 3 int main() 4 { 5 int n, k; 6 while (scanf("%d", &n), n) { 7 scanf("%d", &k); 8 int tmp = k; 9 int sum = k; 10 int st = 0, ed = 0; 11 int l = 0, r = 0; 12 for (int i = 1; i < n; ++i) { 13 scanf("%d", &k); 14 if (tmp >= 0) { 15 tmp += k; 16 r = i; 17 } else { 18 tmp = k; 19 l = i; 20 r = i; 21 } 22 if (sum < tmp) { 23 sum = tmp; 24 st = l; 25 ed = r; 26 } 27 } 28 printf("%d %d %d\n", sum, st, ed); 29 } 30 return 0; 31 }