动态规划没想出来,想出来一个前缀和找最大区间和的方法;
第二个for循环里边记录已遍历点之前的最小值,方便后续做差寻找最大区间和;
注意第二个for循环从0开始(否则类似1 2 3 4 5 6判断不全),最后特判n==0输出;
#include<bits/stdc++.h> using namespace std; const int inf=1e9,maxn=1e7; int n,num[maxn],sum[maxn]; int main() { cin>>n; for(int i=1;i<=n;i++){//统计前缀和 cin>>num[i]; sum[i]=sum[i-1]+num[i]; } int minN=inf,ans=0; for(int i=0;i<=n;i++){//寻找最大区间和; ans=max(ans,sum[i]-minN); minN=min(minN,sum[i]); } if(n>1)cout<<ans<<endl;//输出答案; else cout<<num[1]<<endl; return 0; }