zoukankan      html  css  js  c++  java
  • 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;
        }
    }

    最大连续子序列

  • 相关阅读:
    spring boot 2.1学习笔记【五】SpringBootTest单元测试及日志
    Java网络编程-UDP
    Java网络编程-TCP
    String的特性
    内存池的使用
    软件定时器的使用
    邮箱
    事件集
    线程优先级翻转
    临界区,互斥量与信号量
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3853586.html
Copyright © 2011-2022 走看看