• LIS n^2&nlogn模板


    LIS nlogn模板 http://acm.hdu.edu.cn/showproblem.php?pid=1950

    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #define maxn 40000+10
    using namespace std;
    int a[maxn],d[maxn],len;
    int bs(int i){
        int l,r,mid;
        l=0,r=len; 
        while(l<r){
            mid=(l+r)/2;
            if(d[mid]>=a[i])r=mid;
            else l=mid+1;
        }
        return l;
    }
    int main(){
        int T,n;
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            d[1]=a[1];
            len=1;
            for(int i=2;i<=n;i++){
                if(a[i]>d[len])
                    d[++len]=a[i];
                else{
                    int pos=lower_bound(d,d+len,a[i])-d;
                    d[pos]=a[i];//找到>=a[i]的并更新
                }
            }
            printf("%d
    ",len);
        }
        return 0;
    }

    LIS n^2模板  http://poj.org/problem?id=2533

    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <stdio.h>
    #include <algorithm>
    #include <math.h>
    #define INF 0x3f3f3f3f
    #define maxn 10000+10
    using namespace std;
    int a[maxn],n,dp[maxn];
    int main()
    {
        while(cin>>n){
            int len=-1;
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            dp[0]=-INF;
            for(int i=1;i<=n;i++){
                dp[i]=1;
                for(int j=0;j<i;j++){
                    if(a[i]>a[j])//满足条件时
                        dp[i]=max(dp[i],dp[j]+1);
                    if(dp[i]>len)len=dp[i];
                }
            }
            printf("%d
    ",len);
        }
        return 0;
    }
  • 相关阅读:
    数组的操作方法
    数组遍历的方法以及区别
    组件内的守卫
    路由守卫
    软件工程
    java web (j2ee)学习路线 —— 将青春交给命运
    团队作业(一)- 第五组
    软件工程
    软件工程-第二次作业
    java局部/成员/静态/实例变量
  • 原文地址:https://www.cnblogs.com/pk28/p/4761595.html
Copyright © 2020-2023  润新知