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;
}