2 条题解

  • 0
    @ 2025-10-8 16:55:05
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e6+10;
    LL ls[N],rs[N],a[N];
    int main()
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
    
        ls[0]=0;  for(int i=1;i<=n;i++) ls[i]=max(ls[i-1],0ll)+a[i];
        rs[n+1]=0;for(int i=n;i>=1;i--) rs[i]=max(rs[i+1],0ll)+a[i];
        LL ans=-(1ll<<60),maxls=-(1ll<<60);
        for(int i=1;i<n;i++)
        {
            maxls=max(maxls,ls[i]);
            ans=max(ans,maxls+rs[i+1]);
        }
        printf("%lld\n",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:54:57
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=1e6+10;
      LL ls[N],rs[N],a[N];
      int main()
      {
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
      
          ls[0]=0;  for(int i=1;i<=n;i++) ls[i]=max(ls[i-1],0ll)+a[i];
          rs[n+1]=0;for(int i=n;i>=1;i--) rs[i]=max(rs[i+1],0ll)+a[i];
          LL ans=-(1ll<<60),maxls=-(1ll<<60);
          for(int i=1;i<n;i++)
          {
              maxls=max(maxls,ls[i]);
              ans=max(ans,maxls+rs[i+1]);
          }
          printf("%lld\n",ans);
          return 0;
      }
      
      
      • 1

      *【动态规划:区间一维一边推】最大两子段和[scy]

      信息

      ID
      1020
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      102
      已通过
      40
      上传者