经典的动态规划问题:
解决问题的关键在于dp[i]数组的定义
#include <iostream>
using namespace std;
#define MAXN 1000001
#define MIN -999999
int main(){
long long dp[MAXN]={MIN};//dp[i]表示包括数组中包含第i个即A[i-1]的最大序列和
long long A[MAXN]={0};
long long N=0;
long long res=MIN;
while(cin>>N){
res=MIN;
for(int i=1;i<=N;i++){
cin>>A[i];
}
for(int i=1;i<=N;i++){
dp[i]=max(A[i],A[i]+dp[i-1]);
res=max(res,dp[i]);
}
cout<<res<<endl;
}
return 0;
}

京公网安备 11010502036488号