题意
给一个数组,求最大子串和,并给出首尾的值。
思路
dp水题。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n;
vector<int> a(n);
for (int &e : a) cin >> e;
int ans_sum = -1, ans_lo = -1, ans_hi = -1;
int tmp_sum = 0, tmp_lo = 0;
for (int i = 0; i < n; ++i) {
tmp_sum += a[i];
if (tmp_sum < 0) {
tmp_sum = 0;
tmp_lo = i + 1;
}
else if (tmp_sum > ans_sum) {
ans_sum = tmp_sum;
ans_lo = tmp_lo;
ans_hi = i;
}
}
if (ans_sum == -1) ans_sum = 0, ans_lo = 0, ans_hi = n - 1;
cout << ans_sum << ' ' << a[ans_lo] << ' ' << a[ans_hi] << '\n';
return 0;
}
HINT
不定时更新更多题解,详见 git ! ! !