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

posted @ 2022-09-21 13:23  白缺  阅读(66)  评论(0编辑  收藏  举报