标签:
第1行:整数序列的长度N(2 <= N <= 50000)
第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9)
输出最大子段和。
6
-2
11
-4
13
-5
-2
20
解题思路:
其实这个题很水的,我们只需要O(n)的算法就能过,如果纯暴力的话,应该是O(n^3),对于这个题来说我们只需要
一下和就行了,然后每次判断这个和是不是>=0,如果是的话,那么我们就加上a[i],否则sum=a[i],然后每次找最大值,最后输出最大值就行了。
My Code:
#include <iostream> #include <cstdio> using namespace std; const int MAXN = 50000+5; int a[MAXN]; int main() { int n; while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) scanf("%d",&a[i]); long long Max = -1, sum = 0; for(int i=1; i<=n; i++) { if(sum >= 0) sum += a[i]; else sum = a[i]; if(sum > Max) Max = sum; } printf("%lld\n",Max); } return 0; }
标签:
原文地址:http://blog.csdn.net/qingshui23/article/details/51334381