• 【每天一道PAT】 1007 Maximum Subsequence Sum


    思路

    两种方法,一种方法暴力求解
    一种方法实时读入,当当前相加和小于0时,当前相加和更新为0。

    方法1 求出全部最大序列和
    第五个测试点啊,理解有问题?不知道哪儿错了,数据为全是负数和0。希望有明白的读者加以指正。

    #include <cstdio>
    int num[10005];
    int main()
    {
        int N;//数据个数
        int this_sum=0, max_sum=0;//当前相加和、最大和
        int m,n,temp;//记录子序列的左右边界下标
        int count=0;//计数
        scanf("%d", &N);
        for (int i = 0; i < N; ++i)
        {
            scanf("%d",&num[i]);
            if(num[i]<=0) count++;
        }
        if(count==N)
        {
            printf("0 %d %d",num[0],num[N-1]);
            return 0;
        }
        m = n =0;
        for (int i = 0; i < N; ++i)
        {
            this_sum = 0;
            for (int j = i; j < N; ++j)
            {
                this_sum+=num[j];
                if(this_sum >max_sum)
                {
                    max_sum =this_sum;
                    n = i;
                    m = j;
                }
            }
    
        }
            printf("%d %d %d",max_sum, num[n], num[m]);
    
    }
    
    

    方法2 实时处理

    #include <cstdio>
    int num[10005];
    int main()
    {
        int N;
    
        int this_sum=0, max_sum=0;
        int m,n,temp;
        int count=0;
        scanf("%d", &N);
        for (int i = 0; i < N; ++i)
        {
            scanf("%d",&num[i]);
            if(num[i]<0) count++;
        }
        if(count==N)
        {
            printf("0 %d %d
    ",num[0],num[N-1]);
            return 0;
        }
        this_sum=max_sum=num[0];
        m = n =0;
        for (int i = 1; i < N; ++i)
        {
            if(this_sum < 0 )
            {
                this_sum = 0;
                temp = i;
            }
            this_sum += num[i];
            if(this_sum >max_sum)
            {
                max_sum =this_sum;
                n = temp;
                m = i;
            }
    
        }
        if(max_sum <0)
            printf("0 %d %d", num[0], num[N-1]);
        else
            printf("%d %d %d",max_sum, num[n], num[m]);
    
    }
    

  • 相关阅读:
    springboot2整合seata(AT模式)
    SpringBoot2整合minio
    Minio安装(docker)、初始密码及界面操作
    elasticsearch mapper创建
    elasticsearch 中文分词
    C++11:20weak_ptr弱引用的智能指针
    C++11:19unique_ptr独占的智能指针
    C++11:18shared_ptr共享的智能指针
    C++11:17可变参数模版和type_traits的综合应用
    C++11:16可变参数模板
  • 原文地址:https://www.cnblogs.com/xinyuLee404/p/12657024.html
Copyright © 2020-2023  润新知