最大连续区间和问题
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;
}
代码改变世界