2 条题解
-
0
P1115 最大子段和——题解
解题思路
扫描序列,
cur表示必须以当前位置结尾的最大子段和。它要么只取当前数,要么把当前数接在之前的最优结尾子段后面,所以cur=max(a[i],cur+a[i])。用ans记录所有cur的最大值。复杂度分析
时间复杂度 ,空间复杂度 。
易错点
子段必须非空,不能把初值设为 0,否则全负数时会出错。
C++17 参考代码
#include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false);cin.tie(nullptr); int n;cin>>n;long long x,cur,ans;cin>>x;cur=ans=x; for(int i=2;i<=n;i++){cin>>x;cur=max(x,cur+x);ans=max(ans,cur);} cout<<ans<<'\n';return 0; }
- 1
信息
- ID
- 4922
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
粤公网安备44195502000195号