文章

25

粉丝

364

获赞

8

访问

219.0k

头像
最大连续子序列,在最大子序列的基础上记录序列的起点和终点即可
P1334 浙江大学/中国矿业大学机试题
发布于2021年2月19日 09:18
阅读数 7.8k

/*
 *  Description: 最大连续子序列 (http://noobdream.com/DreamJudge/Issue/page/1334/)
 *  Author: 鱼翔浅底
 *  Date: 2021-02-19 08:55:45
 */

#include <cstdio>
#include <cstdlib>

using namespace std;

#define maxn 10000

//计算最大序列和
void MaxSequenceSum(long long S[], int N)
{
    int start = 0, end = 0; //记录位置
    int s = 0;//记录一段序列的起始位置
    long long ans = S[0], tmp = 0;

    for (int i = 0; i < N; i++)
    {
        tmp += S[i];
        if (ans < tmp) //更新最大子列和
        {
            ans = tmp;
            start = s;
            end = i;
        }
        if (tmp < 0) //子列和为负,则重新开始累加
        {
            tmp = 0;
            s = i + 1;//此位置元素为负,从下一个元素开始新的序列
            ans = (ans < S[i]) ? S[i] : ans; //更新最大子列和
        }
    }
    if (ans < 0)//全是负数的情况
    {
        ans = 0;
        start = 0;
        end = N - 1;
    }

    printf("%lld %lld %lld\n", ans, S[start], S[end]);

    return;
}

int main()
{
    int N;
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发