题解 | 最大连续子序列

最大连续子序列

https://www.nowcoder.com/practice/afe7c043f0644f60af98a0fba61af8e7

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int dp[10001];
int s[10001] = {0};
int main() {
    int k;
    bool isMinus = true;
    while (scanf("%d", &k) != EOF) {
        if (k == 0) { break; }
        int num;
        for (int i = 0; i < k; ++i) {
            scanf("%d", &num);
            if (num >= 0) { isMinus = false; }
            s[i] = num;
        }
        if (isMinus) {
            int k = 0;
            while (true) {
                if (s[k] == 0) { break; }
                ++k;
            }
            printf("%d %d %d\n", 0, s[0], s[k - 1]);
            break;
        }
        vector<int> pos;
        int curmax = s[0];
        dp[1] = s[0];
        for (int j = 2; j <= k; ++j) {
            if (dp[j - 1] <= 0) { dp[j] = s[j - 1]; }
            else {
                dp[j] = dp[j - 1] + s[j - 1];
            }
            if (dp[j] > curmax) {
                pos.clear();
                curmax = dp[j];
                pos.push_back(j);
            }
        }
        if (pos.size() != 0) {
            int i = pos[0] - 1;
            int total = s[i];
            while (total != curmax) {
                i = i - 1;
                total += s[i];
            }
            int j = pos[0] - 1;
            printf("%d %d %d\n", curmax, s[i], s[j]);
            pos.clear();
        }
        else {
            printf("%d %d %d\n", curmax, s[0], s[0]);
        }

    }
    return 0;
}

#shit#
全部评论

相关推荐

07-14 13:37
重庆大学 C++
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务