3 条题解
- 
  1
#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
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
 - 标签
 - 递交数
 - 293
 - 已通过
 - 87
 - 上传者