动态规划做法:O(N)的复杂度;
步骤1:我们要求以dp[i]表示以A[i]结尾的最大连续子序列和(这里A[i]必须为连续序列的末尾);
步骤2:我们考虑一下两种情况
1:最大连续子序列和只有一个元素,即以A[i]开头,以A[i]结尾;
2:最大连续子序列从序列的某一个位置p到A[i]为止;
对于第一种情况,最大子序列和就是A[i];
对于第二种情况,最大子序列和为dp[i-1]+A[i];
所以:状态转移公式为 dp[i]=max(A[i],dp[i-1]+A[i]);
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
int n;
int a[107],dp[107];
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]);
int ans=dp[0];
for(int i=1;i<n;i++)
{
ans=max(ans,dp[i]);
}
printf("%d",ans);
}