• HDU 1231


    求最大连续子序列

    一开始想到的一种O(n^2)的算法,应该会超时

    后来想出了下面的方法

    #include <iostream>
    using namespace std;
    struct DP{
        int sum,sta,end;
        void init(int su,int st,int en){
            sum=su;
            sta=st;
            end=en;
        }
    };
    int a[10000];
    int main()
    {
        int t;
        while(cin>>t){
            if(0==t)break;
            for(int i=0;i<t;i++){
                cin>>a[i];
            }
            DP tem,max;
            tem.init(0,0,0);
            max.init(a[0],0,0);
            for(int i=0;i<t;i++){
                tem.end=i;
                tem.sum+=a[i];
                if(tem.sum>max.sum&&tem.sum>=0){
                    max.init(tem.sum,tem.sta,tem.end);
                }
                if(tem.sum<0){            //当tem.sum<0的时候,直接放弃这一段
                    tem.init(0,i+1,i+1);
                }

            }
            if(max.sum<0)cout<<"0 "<<a[0]<<" "<<a[t-1]<<endl;               //所有的元素都小于0的时候,输出0,a[0],a[t-1];
            else cout<<max.sum<<" "<<a[max.sta]<<" "<<a[max.end]<<endl;
        }
    }

    最大连续子序列

  • 相关阅读:
    Mac如何自定义本地化文件夹名
    Mac如何升级自带的vim
    0. GC 前置知识
    Git如何修改一个过去的Commit
    1. GC标记-清除算法(Mark Sweep GC)
    防火墙、WAF、IPS、IDS都是什么
    Python dir和vars的区别
    【Kafka】Kafka数据可靠性深度解读
    Java网络编程基础之TCP粘包拆包
    【Kafka】Consumer配置
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3853586.html
Copyright © 2020-2023  润新知