码迷,mamicode.com
首页 > 其他好文 > 详细

P1115最大子段和

时间:2018-04-05 19:21:03      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:www.   直接   img   ==   new   lld   bsp   turn   图片   

题目: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最大子段和

标签:www.   直接   img   ==   new   lld   bsp   turn   图片   

原文地址:https://www.cnblogs.com/Zinn/p/8723675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!