NYOJ 44 子串和

http://acm.nyist.net/JudgeOnline/problem.php?pid=44

水题一道.  很早的时候就知道怎么做了,但是以前都是只知道是怎么做的.  但是自己没有去分析过...

第 i 位的时候,如果求的值要最大则是 ans[i]=max(ans[i-1]+a[i], a[i]);

View Code
 1 #include <stdio.h>
 2 #define maxn 1000005
 3 int ans[maxn], a[maxn];
 4 int max(int a, int b)
 5 {
 6     return a > b ? a : b;
 7 }
 8 int main()
 9 {
10     int i, j, n, t, mark;
11     scanf("%d",&t);
12     while(t--)
13     {
14         scanf("%d",&n);
15         for(i=0; i<n; i++){
16             scanf("%d",&a[i]);
17             ans[i]=0;
18         }
19         mark = a[0];
20         ans[0] = a[0];
21         for(i=1; i<n; i++){
22             ans[i]=max(ans[i-1]+a[i], a[i]);
23             if(mark < ans[i]) mark = ans[i];
24         }
25         printf("%d\n",mark);
26     }
27     return 0;
28 }
posted @ 2012-09-03 20:02  YORU  阅读(235)  评论(0编辑  收藏  举报