• 牛客在线编程_连续子数组最大和


    题目地址

    求最大子段和

    • 可以用贪心,dp和分治。
    • dp的做法其实和贪心一模一样...也不知道是不是dp。

    code1(贪心)

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+50;
    int n,a[N];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        int ans=-0x3f3f3f3f;
        int p=0;
        for(int i=1;i<=n;i++){
            p+=a[i];
            ans=max(ans,p);
            if(p<0){
                p=0;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    

    code2(分治)

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+50;
    int n,a[N];
    int sum(int l,int r){
        if(l==r){
            return a[l];
        }
        int mid=(l+r)/2;
        int lsum=sum(l,mid);
        int rsum=sum(mid+1,r);
        int ls=0;
        int rs=0;
        int tmp=0;
        for(int i=mid;i>=l;i--){
            tmp+=a[i];
            ls=max(ls,tmp);
        }
        tmp=0;
        for(int i=mid+1;i<=r;i++){
            tmp+=a[i];
            rs=max(rs,tmp);
        }
        int msum=ls+rs;
        return max(msum,max(lsum,rsum));
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        printf("%d
    ",sum(1,n));
        return 0;
    }
    

    code3(动态规划)

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+50;
    int n,a[N],dp[N];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        dp[1]=a[1];
        int ans=dp[1];
        for(int i=2;i<=n;i++){
            if(dp[i-1]>0){
                dp[i]=dp[i-1]+a[i];
            }else{
                dp[i]=a[i];
            }
            ans=max(ans,dp[i]);
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    跳转网页
    在代码插入图像的位置
    图像宽度和高度
    添加图像
    指向同一网站中其中的页面的链接
    指向其他网站的链接
    嵌套列表
    定义
    LeetCode561 数组拆分 I
    LeetCode344 反转字符串
  • 原文地址:https://www.cnblogs.com/zxcoder/p/12231663.html
Copyright © 2020-2023  润新知