P1115最大子段和

Posted Zinn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1115最大子段和相关的知识,希望对你有一定的参考价值。

题目:https://www.luogu.org/problemnew/show/P1115

很简明的一道题;

这里用了递归分治,然而似乎还有更简单的做法(贪心)。

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
int inf=10005;
int n,a[200005];
long long cl(int l,int r)
{
    if(l==r)return a[l];
    long long ret1=-inf,ret2=-inf;
    int mid=((l+r)>>1);
    long long sum=0;
    for(int i=mid;i>=l;i--)
    {
        sum+=a[i];
        ret1=max(ret1,sum);
    }
    sum=0;
    for(int i=mid+1;i<=r;i++)
    {
        sum+=a[i];
        ret2=max(ret2,sum);
    }
    return max(cl(l,mid),max(cl(mid+1,r),ret1+ret2));
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    printf("%lld",cl(1,n));
    return 0;
}

贪心(转):

技术分享图片
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n[200001],p,ans[200001]={0};
    int sum=-9999999;//|x|<=10000   QWQ
    cin>>p;
    for(int i=1;i<=p;i++)
    {
        cin>>n[i];//输入
        ans[i]=max(ans[i-1]+n[i],n[i]);//DP
        sum=max(sum,ans[i]);//取最大值也同时进行,节约时间
    }
    cout<<sum;//直接输出
    return 0;
}
贪心做法

 

以上是关于P1115最大子段和的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1115 最大子段和

动态规划入门 P1115 最大子段和(链状)

P1115 最大子段和

p1115 最大子段和(线段树)

Luogu P1115 最大子段和(dp 贪心)

P1115 最大子段和(简单DP)