4 条题解

  • 2
    @ 2023-4-2 15:29:35
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int maxv=-114514;
    int A[110000];
    int dp[110000];
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>A[i];
    	}
    	for(int i=1;i<=n;i++){
    		dp[i]=max(dp[i-1]+A[i],A[i]);
    		maxv=max(maxv,dp[i]); 
    	}
    	cout<<maxv;
    }
    
    • 1
      @ 2025-11-9 19:32:59
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e6+10;
      int n,f[N],a[N],maxn=INT_MIN;
      int main() {
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      	}
      	for(int i=1;i<=n;i++){
      		f[i]=a[i];
      		f[i]=max(f[i],f[i-1]+a[i]);
      		maxn=max(maxn,f[i]);
      	}
      	cout<<maxn;
      	return 0;
      }
      
      
      • 1
        @ 2025-10-26 20:00:36
        #include <bits/stdc++.h>
        using namespace std;
        const int N = 1e5 + 10;
        const int INF = 0x3f3f3f3f;
        int n;
        int a[N],dp[N],nmax = -INF;
        int main(){
        	cin >> n;
        	for(int i = 1;i <= n;i++){
        		cin >> a[i];
        	}
        	for(int i = 1;i <= n;i++){
        		dp[i] = a[i];
        		dp[i] = max(a[i],dp[i - 1] + a[i]);
        		//printf("dp[%d] = %d\n",i,dp[i]);
        		nmax = max(nmax,dp[i]);
        	}
        	cout << nmax;
        	return 0;
        }    
        
        
        • 1
          @ 2023-3-9 18:05:47

          f[i]表示以f[i]结尾的最大连续子序列的最大和。

          a[i]要么自己单独一个,要么和前面的连起来。

          则f[i]=max(a[i],f[i-1]+a[i]);

          #include<iostream>
          
          using namespace std;
          
          int main(){
          	int n;
          	cin>>n;
          	int a[n+10]={0},f[n+10]={0};
          	for(int i = 1; i <= n; i ++ ){
          		cin>>a[i];
          	}
          	for(int i = 1; i <= n; i ++ ){
          		f[i]=max(a[i],f[i-1]+a[i]);
          	}
          	int ans = -1;
          	for(int i = 1; i <= n; i ++ ){
          		ans = max(ans,f[i]);
          	}
          	cout<<ans;
          }#include<iostream>
          
          using namespace std;
          
          int main(){
          	int n;
          	cin>>n;
          	int a[n+10]={0},f[n+10]={0};
          	for(int i = 1; i <= n; i ++ ){
          		cin>>a[i];
          	}
          	for(int i = 1; i <= n; i ++ ){
          		f[i]=max(a[i],f[i-1]+a[i]);
          	}
          	int ans = -1;
          	for(int i = 1; i <= n; i ++ ){
          		ans = max(ans,f[i]);
          	}
          	cout<<ans;
          }
          
          • 1

          信息

          ID
          1763
          时间
          1000ms
          内存
          256MiB
          难度
          6
          标签
          递交数
          294
          已通过
          87
          上传者