文章

19

粉丝

69

获赞

30

访问

18.1k

头像
详细注释AC代码
P1664 中南大学机试题
发布于2023年8月24日 18:47
阅读数 815

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int n;
	while (cin >> n)
	{
		// 输入序列
		vector<int> seq(n);
		for (int i = 0; i < n; i++)
		{
			cin >> seq[i];
		}

		vector<int> dp(n); // 以i结尾的连续子序列和
		dp[0] = seq[0]; // 初始化dp数组第一元素
		int head = 0, rear = 0;
		int globalHead = head, globalRear = rear; // 最大序列和的起点、终点
		int maxSum = max(dp[0], 0); // 初始化全局最大和

		for (int i = 1; i < n; i++)
		{
			// 前面的序列和是负增益
			if (dp[i - 1] < 0)
			{
				dp[i] = seq[i];
				head = i;
				rear = i;
			}
			else
			{
				dp[i] = seq[i] + dp[i - 1];
				rear = i;
			}

			// 更新全局最大序列和的参数(等于的时候也不更新)
			if (maxSum < dp[i])
			{
				maxSum = dp[i];
				globalHead = head;
				globalRear = rear;
			}
		}

		cout << maxSum << ' ' << globalHead << ' ' << globalRear << endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发