zoukankan      html  css  js  c++  java
  • 最大不降子序列

    解法1(二分法:o(n*log2(n))):

     1 #include <stdio.h>
     2 #include <iostream>
     3 #define MAXN 10000
     4 using namespace std;
     5 
     6 int a[MAXN], low[MAXN];
     7 
     8 int main(void)
     9 {
    10     int n;
    11     while(cin >> n)
    12     {
    13         low[1]=a[1];
    14         int now=1;
    15         for(int i=1; i<=n; i++)
    16         cin >> a[i];
    17         for(int i=2; i<=n; i++)
    18         {
    19             if(a[i]>low[now])  low[++now]=a[i];
    20             else
    21             {
    22                 int pos=lower_bound(low, low+now, a[i]) - low;
    23                 low[pos]=a[i];
    24             }
    25         }
    26         cout << now << endl;
    27     }
    28     return 0;
    29 }

    解法2(二分法队列实现:o(n*long2(n))):

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string.h>
     4 #define MAXN 1000000
     5 using namespace std;
     6 
     7 int main(void)
     8 {
     9     int n;
    10     while(cin >> n)
    11     {
    12         int stack[MAXN];
    13         int top=0;
    14         stack[0]=-1;
    15         for(int i=1; i<=n; i++)
    16         {
    17             int temp;
    18             cin >> temp;
    19             if(temp>stack[top])  stack[++top]=temp;
    20             else
    21             {
    22                 int pos=lower_bound(stack, stack+top, temp)-stack;
    23                 stack[pos]=temp;
    24             }
    25         }
    26         cout << top << endl;
    27     }
    28     return 0;
    29 }

    解法3(o(n*n)):

     1 #include <stdio.h>
     2 #include <iostream>
     3 #define MAXN 10000+10
     4 using namespace std;
     5 
     6 int main(void)
     7 {
     8     int n;
     9     while(cin >> n)
    10     {
    11         int a[MAXN], alen[MAXN], maxlen=1;
    12         for(int i=1; i<=n; i++)
    13         alen[i]=1;
    14         for(int i=1; i<=n; i++)
    15         cin >> a[i];
    16         for(int i=2; i<=n; i++)
    17         {
    18             int max=0;
    19             for(int j=1; j<=i-1; j++)
    20             if(a[j]<a[i] && max<alen[j])    max=alen[j];
    21             alen[i]=max+1;
    22             if(alen[i]>maxlen)   maxlen=alen[i];
    23         }
    24         cout << maxlen << endl;
    25     }
    26     return 0;
    27 }

    方法4(dp(o(n*n))):

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <iostream>
     5 #define MAXN 100
     6 using namespace std;
     7 
     8 int main(void)
     9 {
    10     int n;
    11     while(cin >> n)
    12     {
    13         int a[MAXN], low[MAXN];
    14         memset(low, 0, sizeof(low));
    15         for(int i=0; i<n; i++)
    16         cin >> a[i];
    17         for(int i=0; i<n; i++)
    18         {
    19             for(int j=i+1; j<n; j++)
    20             {
    21                 if(a[j]>a[i])
    22                 low[j]++;
    23             }
    24 
    25         }
    26         sort(low, low+n);
    27         cout << low[n-1];
    28     }
    29     return 0;
    30 }



  • 相关阅读:
    Flask 的 请求扩展 与 中间件
    Flask的配置文件 与 session
    django中的FBV和CBV
    Flask开启多线程、多进程
    WPF获取原始控件样式
    一个40岁老码农的总结,奋斗没有意义,选择大于努力
    FastText 分析与实践
    Flask的多app应用,多线程如何体现
    Python 远程调用MetaSploit
    GitLab 7.5.3 CentOS7安装和SMTP配置
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/5835660.html
Copyright © 2011-2022 走看看