zoukankan      html  css  js  c++  java
  • 最大连续和

    首先用枚举:

     1 #include<iostream>
     2 using namespace std;
     3 int n,a[11000];
     4 int main()
     5 {
     6     cin>>n;
     7     for(int i=1;i<=n;i++)
     8     {
     9         cin>>a[i];
    10     }
    11     int maxn=0,sum=0;
    12     for(int i=1;i<=n;i++)
    13     {
    14         for(int j=1;j<=n;j++)
    15         {
    16             sum=0;
    17             for(int k=i;k<=j;k++)
    18             {
    19                 sum+=a[k];
    20             }
    21             maxn=max(maxn,sum);
    22         }
    23     }
    24     cout<<maxn;
    25 }

    这应该是每个人不看N范围的第一反应......(大佬除外),但看到N<=200000......我们发现n³妥妥的爆,我想的方法是前缀和书上的方法也是,时间复杂度是O(N²):

     1 #include<iostream>
     2 using namespace std;
     3 long long n,a[210000];
     4 long long ans[210000];
     5 int main()
     6 {
     7     cin>>n;
     8     for(long long i=1;i<=n;i++)
     9     {
    10         cin>>a[i];
    11     }
    12     for(long long i=1;i<=n;i++) ans[i]=ans[i-1]+a[i];
    13     long long maxn=-2000001,sum=0;
    14     for(long long i=1;i<=n;i++)
    15     {
    16         for(long long j=i;j<=n;j++)
    17         {
    18             maxn=max(maxn,ans[j]-ans[i-1]);
    19         }
    20     }
    21     cout<<maxn;
    22 }

    发现还是会TLE.....,于是书上用二分去算.....是nlog(n)的时间复杂度.....但我用的是O(n)的复杂度:

    #include<bits/stdc++.h>
    using namespace std;
    int x;
    int n;
    int sum=0;
    int maxn=-2147483647;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            sum=max(sum+x,x);//用DP的思想,选,不选
            maxn=max(maxn,sum);
        }
        printf("%d",maxn);
        return 0;
    }
  • 相关阅读:
    SVN的学习
    IIS 503 错误
    Windows系统CMD下常用命令
    Linux基础整理
    JavaEESSM框架配置文件
    JavaXML整理
    Java反射、反射练习整理
    Java网络通信协议、UDP、TCP类加载整理
    Java多线程、线程池和线程安全整理
    JavaProperties类、序列化流与反序列化流、打印流、commons-IO整理
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/9518456.html
Copyright © 2011-2022 走看看