Bootstrap

最大连续子序列和

题目

给定K个整数的序列{ A1, A2, …, Ak },其任意连续子序列可表示为{ Ai, Ai+1, …, Aj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个。

例如给定序列{ -2, 11, -4, 13, -5, -2 },
其最大连续子序列为{ 11, -4, 13 },最大和为20。

动态规划:

#include<cstdio>
#include<algorithm>
using namespace std;
#define N 10010

int A[N], dp[N];//A[i]存放序列,dp[i]存放一A[i]结尾的连续序列的最大和
int main(){
	
	int n;
	scanf("%d",&n);
	for(int i = 0; i < n; i++){//读入序列 
		scanf("%d", &A[i]);
	}
	//边界
	dp[0] = A[0];
	
	for(int i = 1; i < n; i++){
		//状态转移方程
		dp[i] = max(A[i],dp[i-1] + A[i]); 
	} 
	
	
	//dp[i]存放一A[i]结尾的连续序列的最大和,遍历dp[n]找到最大值 
	int k = 0;
	for(int i =1; i < n; i++){
		if(dp[i] > dp[k]){
			k = i;
		}
	}
	printf("%d",dp[k]);
	return 0;
} 

输入数据:

6
-2 11 -4 13 -5 -2

输出结果:

20
;