2017-08-27 16:38:47
writer:pprp
最大连续区间和,可以有很多种方法实现,其中最常见的是运用一维前缀和还有动态规划来解决的;
代码如下:
/* @theme:最大连续区间和的算法 @writer:pprp @declare:有几种方法 @date:2017/8/27 */ #include <bits/stdc++.h> using namespace std; const int maxn = 10000; int a[maxn]; int sum[maxn]; int ans; int main() { //法一、暴力解,这就不写了 //法二、采用一维前缀和 ios::sync_with_stdio(false); int N; cin >> N; for(int i = 0 ; i < N ; i++) { cin >> a[i]; } sum[0] = a[0]; for(int i = 1 ; i < N ; i++) sum[i] = sum[i-1] + a[i]; ans = 0; for(int i = 0 ; i < N ; i++) for(int j = i+1 ; j < N ; j++) ans = max(ans,sum[j]-sum[i-1]); cout << ans << endl; //法三、动态规划 int ans = 0; int tmp = 0; for(int i = 0 ; i < N ; i++) { tmp = max(tmp,0) + a[i]; ans = max(ans, tmp); } cout << ans << endl; //总结,一般都采用的是第三种方法,比较省时间和空间 return 0; }
时间: 2024-10-17 06:36:09