http://acm.nyist.net/JudgeOnline/problem.php?pid=44
水题一道. 很早的时候就知道怎么做了,但是以前都是只知道是怎么做的. 但是自己没有去分析过...
第 i 位的时候,如果求的值要最大则是 ans[i]=max(ans[i-1]+a[i], a[i]);

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 }