面试题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 }

 

posted @ 2015-09-18 09:18  jasaiq  阅读(158)  评论(0编辑  收藏  举报