zoukankan      html  css  js  c++  java
  • LIS最长上升子序列三种方法 (模板)

     1 O(n^2)的方法:
     2 #include <iostream>
     3 #include <stdio.h>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 int a[15010],dp[15010],front[15010];
     8 int n;
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     int maxn=0;
    13     for(int i=1;i<=n;i++){
    14         scanf("%d",&a[i]);
    15         dp[i]=1;
    16         front[i]=-1;
    17         for(int j=1;j<i;j++){
    18             if(a[j]<a[i]){
    19                 dp[i]=max(dp[i],dp[j]+1);
    20                 front[i]=j;
    21             }
    22         }
    23         maxn=max(maxn,dp[i]);
    24     }
    25     cout<<maxn<<endl;
    26     return 0;
    27 }
    28 O(n log n)的方法:
    29 二分:
    30 #include <iostream>
    31 #include <stdio.h>
    32 #include <cstring>
    33 #include <algorithm>
    34 using namespace std;
    35 int n,a[20010],c[20010],len=0;
    36 int Find(int x)
    37 {
    38     int l=1,r=len,mid;
    39     while(l<=r){
    40         mid=(l+r)>>1;
    41         if(x>c[mid]){ //记忆方法:求上升序列,就表示x更大,那么就是大于
    42             l=mid+1;
    43         }else r=mid-1;
    44     }
    45     return l;
    46 }
    47 int main()
    48 {
    49     scanf("%d",&n);
    50     for(int i=1;i<=n;i++)
    51         scanf("%d",&a[i]);
    52     for(int i=1;i<=n;i++){
    53         int k=Find(a[i]);
    54         c[k]=a[i];
    55         len=max(len,k);
    56     }
    57     printf("%d",len);
    58     return 0;
    59 }
    60 STL 求最长上升子序列:
    61 #include <iostream>
    62 #include <stdio.h>
    63 #include <algorithm>
    64 #include <cstring>
    65 using namespace std;
    66 #define N 1000
    67 #define INF 2^32-1
    68 int n;
    69 int a[N],dp[N];
    70 void solve()
    71 {
    72     fill(dp,dp+n,INF);
    73     for(int i=0;i<n;i++)
    74         *lower_bound(dp,dp+n,a[i])=a[i];
    75     printf("%d
    ",lower_bound(dp,dp+n,INF)-dp);
    76 }
    77 int main()
    78 {
    79     while(cin>>n){
    80         for(int i=0;i<n;i++)
    81             cin>>a[i];
    82         solve();
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    Spring优势
    Spring中的设计模式
    Spring MVC体系结构
    《Spring3.0就这么简单》第1章快速入门
    InvocationHandler
    JdkDynamicAopProxy源码
    Proxy代理(AOP实现原理)
    Spring AOP 实现原理
    BeanFactory和ApplicationContext的作用和区别
    背景图片相关设置
  • 原文地址:https://www.cnblogs.com/wydxry/p/7300534.html
Copyright © 2011-2022 走看看