zoukankan      html  css  js  c++  java
  • hdu 5087 Revenge of LIS II (DP)

    题意:

    N个数,求第二长上升子序列的长度。

    数据范围:

    1. 1 <= T <= 100
    2. 2 <= N <= 1000
    3. 1 <= Ai <= 1 000 000 000

    思路:

    数据给的很暧昧,用n^2的算法可以过。故用n^2算法。只要在DP过程中记录得到f[i]是否只有一种方法即可。详看代码。

    代码:

    int T,n;
    int a[1005],f[1005];
    bool NOTalone[1005];
    
    int main(){
        //freopen("test.in","r", stdin);
        cin>>T;
        while(T--){
            scanf("%d",&n);
            rep(i,1,n) scanf("%d",&a[i]);
            rep(i,1,n) f[i]=1;
            mem(NOTalone,false);
            rep(i,2,n){
                rep(j,1,i-1) if(a[i]>a[j]){
                    if(f[j]+1>f[i]){
                        f[i]=f[j]+1;
                        NOTalone[i] = NOTalone[j];
                    }
                    else if(f[j]+1==f[i]){
                        NOTalone[i]=true;
                    }
                }
            }
    
            int t=f[1];  rep(i,2,n) t=max(t,f[i]);
            bool NOT_ALONE=false;
            int c=0;
            rep(i,1,n) if(t==f[i]) ++c,NOT_ALONE|=NOTalone[i];
            if(c>1) NOT_ALONE=true;
            if(!NOT_ALONE)
                cout<<t-1<<endl;
            else
                cout<<t<<endl;
        }
        //fclose(stdin);
    }
  • 相关阅读:
    oracle-PL/SQL1
    ROS之Gazebo
    ROS之urdf 2
    ROS之urdf 1
    ROS 面部识别
    ROS x Arduino
    STM32F0的低功耗模式
    项目进度
    C++函数返回为引用
    STM32F0的多路ADC 无DMA
  • 原文地址:https://www.cnblogs.com/fish7/p/4077206.html
Copyright © 2011-2022 走看看