PAT (Advanced Level) 1007 Maximum Subsequence Sum

题意

给一个数组,求最大子串和,并给出首尾的值。

思路

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 ! ! !

发布了101 篇原创文章 · 获赞 16 · 访问量 4618

猜你喜欢

转载自blog.csdn.net/abcdefbrhdb/article/details/104660164