2 条题解

  • 0
    @ 2025-10-8 16:54:12

    【参考程序1】

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e6+10;
    LL a[N],f[N];
    //f[i]表示以i为结尾的最大连续和 
    int main() 
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
        LL ans=-(1ll<<60);
        f[0]=0;
        for(int i=1;i<=n;i++)
        {
            if(f[i-1]>0)f[i]=a[i]+f[i-1];
            else        f[i]=a[i];
            
            ans=max(ans,f[i]);
        }
        printf("%lld\n",ans);
        return 0;    
    }
    

    【参考程序2】

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e6+10;
    LL a[N];
    int main() 
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
        LL ans=-(1ll<<60);
        LL s=0; //s相当于实时表达程序1的f[i]
        for(int i=1;i<=n;i++)
        {
            if(s>0)s=a[i]+s;
            else   s=a[i];
            
            ans=max(ans,s);
        }
        printf("%lld\n",ans);
        return 0;    
    }
    
    • 0
      @ 2025-10-8 16:54:04
      【参考程序1】
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=1e6+10;
      LL a[N],f[N];
      //f[i]表示以i为结尾的最大连续和 
      int main() 
      {
      	int n;scanf("%d",&n);
      	for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
      	LL ans=-(1ll<<60);
      	f[0]=0;
      	for(int i=1;i<=n;i++)
      	{
      		if(f[i-1]>0)f[i]=a[i]+f[i-1];
      		else        f[i]=a[i];
      		
      		ans=max(ans,f[i]);
      	}
      	printf("%lld\n",ans);
      	return 0;	
      }
      【参考程序2】
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=1e6+10;
      LL a[N];
      int main() 
      {
      	int n;scanf("%d",&n);
      	for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
      	LL ans=-(1ll<<60);
      	LL s=0; //s相当于实时表达程序1的f[i]
      	for(int i=1;i<=n;i++)
      	{
      		if(s>0)s=a[i]+s;
      		else   s=a[i];
      		
      		ans=max(ans,s);
      	}
      	printf("%lld\n",ans);
      	return 0;	
      }
      
      • 1

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

      信息

      ID
      837
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      172
      已通过
      41
      上传者