当前位置:   article > 正文

上海计算机学会2022年8月月赛C++丙组T3最大子串_最大子串 上海市计算机学会

最大子串 上海市计算机学会

最大子串

内存限制: 256 Mb时间限制: 1000 ms

题目描述

给定 n 个整数 a1​,a2​,⋯,an​ 构成一个序列,请为这个序列寻找一个子串,使数字之和达到最大。子串是原序列中连续且保持顺序的一段数字,空串或序列全体都算原序列的子串。

输入格式

第一行:单个整数 n。
第二行:n 个整数 a1​,a2​,…,an​。

输出格式

单个整数:表示子串的最大和。

数据范围
  • 对于 30% 的数据,1≤n≤200,
  • 对于 60% 的数据,1≤n≤5000,
  • 对于 100% 的数据,1≤n≤200,000。
  • −10000≤ai​≤10000
样例数据

输入:
5
1 2 -10 2 3
输出:
5


输入:
3
-1 -2 -3
输出:
0


输入:
3
3 -2 3
输出:
4

 解析:贪心思维,如果当前的子串和为正数,可以为后边的子串带来收益,保留,如果是负数,舍弃,从零开始,详见代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[200005];
  4. int main() {
  5. int n;
  6. long long sum = 0;//当前子串和
  7. long long ans = 0;
  8. cin >> n;
  9. for (int i = 1; i <= n; i++) {
  10. scanf("%d", &a[i]);
  11. sum += a[i];
  12. if (sum < 0) sum = 0;//如果负数,归零
  13. if (sum > ans) ans = sum;//求最大值
  14. }
  15. cout << ans << endl;
  16. return 0;
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/439938
推荐阅读
相关标签
  

闽ICP备14008679号