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
- 标签
- 递交数
- 279
- 已通过
- 85
- 上传者