题目有几种做法,不过复杂度有区别,穷举On^3,前缀和On^2,分治Onlogn,dp On 。
贴一个dp的。
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 200000 + 10;
int ans[maxn];
int dp[maxn]={0};//dp[i]表示以i结尾最大的连续字段和
int n;
int sum=-1000000;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&ans[i]);
for(int i=1;i<=n;i++)
{
dp[i]=max(dp[i-1]+ans[i],ans[i]);
sum=max(sum,dp[i]);
}
printf("%d",sum);
return 0;
}