1 条题解
-
0
- 【题意】给你一个整数数组 ,请你找出一个具有最大和的连续子数组
- 【状态表示】 表示以 结尾的最大子数组和
- 【状态转移】
- 最后的结果就是
- 状态的个数是 ,转移是 ,所以时间复杂度是
- 由于 只与 有关,我们可以把 数组用一个变量 代替
#include <bits/stdc++.h> using namespace std; int maxSum(vector<int>& a) { int n = a.size(), ans = a[0], dp = a[0]; // dp(i): 以 a(i) 结尾的最大子数组和 for (int i = 1; i < n; i++) { dp = max(a[i], dp + a[i]); ans = max(ans, dp); } return ans; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i]; cout << maxSum(a) << '\n'; return 0; }
- 1
信息
- ID
- 172
- 时间
- 100ms
- 内存
- 32MiB
- 难度
- 3
- 标签
- 递交数
- 74
- 已通过
- 38
- 上传者