状态转移方程:
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; }