#include <iostream>
#include <vector>
#include <limits>
int main() {
int sum;
std::cin >> sum;
std::vector<int> myVector(sum);
for (int i = 0; i < sum; i++) {
std::cin >> myVector[i];
}
int maxSum = myVector[0]; // 最大连续子序列和的初始值
int currentSum = myVector[0]; // 当前连续子序列和的初始值
for (int i = 1; i < sum; i++) {
// 在当前元素和当前连续子序列和之间选择较大的值作为新的连续子序列和
currentSum = std::max(myVector[i], currentSum + myVector[i]);
// 更新最大连续子序列和
maxSum = std::max(maxSum, currentSum);
}
std::cout << maxSum << std::endl;
return 0;
}
/*
输入样例:
7
-2 -3 -5 8 1 -4 -2
输出样例:
9
我的表格:
| 1| 2| 3 | 4| 5| 6| 7 横轴:连续的子列个数
-2|-2| 0| 0 | 0| 0| 0| 0 currentSum=-2 currentSum为表格每一横列的最大值
-3|-3|-5| 0 | 0| 0| 0| 0 currentSum=-3
-5|-5|-8|-10| 0| 0| 0| 0 currentSum=-5
8| 8| 3| 0 |-2| 0| 0| 0 currentSum=8
1| 1| 9| 4 | 1|-1| 0| 0 currentSum=9
-4|-4|-3| 5 | 0|-3|-5| 0 currentSum=5
-2|-2|-6|-5 | 3|-2|-5|-7 currentSum=3 maxSum=9
纵轴:具体的输入样例
每一个空格:从最左边的数算起,累加横轴个数后的结果
*/
动态规划--最大子列和问题--max subarray
最新推荐文章于 2024-08-10 07:14:43 发布