Problem P14. [算法课动态规划]连续数组最大和

感觉很简单的一道题,
curnum存下连续数组和大于0的数值,maxnum存下最大连续数组和,curnum从数组头开始,遍历数组,+= 数组值,当curnum大于0时,那么即便紧接着的后面有一个很大的数组和,但是加上curnum会更大,但是curnum小于0的时候,会损害后面的数组和,所以curnum现在所代表的前面的数组和就要舍弃,重置curnum=0,即从该位置重新算一个新的数组和。具体实现看代码。
#include<iostream>
#include<bits/stdc++.h>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
vector<int> nums;
int n = 0;
scanf("%d", &n);
while(n--){
int c;
scanf("%d", &c);
nums.push_back(c);
}
int maxsum = -1;
int cursum = 0;
for (int i = 0; i < nums.size(); i++){
cursum += nums[i];
if (cursum > 0){
if (cursum > maxsum){
maxsum = cursum;
}
}else {
cursum = 0;
}
}
if (maxsum > 0){
cout << maxsum;
}else {
maxsum = nums[0];
for (int i = 0; i < nums.size(); i++){
if (nums[i] > maxsum){
maxsum = nums[i];
}
}
cout << maxsum;
}
return 0;
}

浙公网安备 33010602011771号