状态转移方程:

dp[i]=max{A[i],dp[i-1]+A[i]}

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
using namespace std;
const int MAX=10010;
int n;
//dp[i]表示以A[i]作为结尾的连续序列的最大和
int A[MAX],dp[MAX];
int main(){
    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(dp[i-1]+A[i],A[i]);
    int result=dp[0];
   for(int i=1;i<n;i++){
        if(result<dp[i])
            result=dp[i];
   }
    printf("%d\n",result);
    return 0;
}

 

posted on 2018-04-10 10:28  Sunshine&暖阳  阅读(373)  评论(0编辑  收藏  举报