模板:最长上升子序列(LIS)

Posted aze-qwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板:最长上升子序列(LIS)相关的知识,希望对你有一定的参考价值。

http://lfyzit.com/problem/242

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<stack>
 5 using namespace std;
 6 int d[205], c[205], a[205], len=1, n=0;
 7 int main(){
 8     int x;
 9     while(cin>>x) {
10         a[++n]=x;
11     }
12 
13     d[1]=a[1];
14     c[1]=1;
15     for(int i=2; i<=n; ++i) {
16         if(d[len]<a[i]) {
17             d[++len]=a[i];
18             c[i]=len;
19         } 
20         else if(d[len]>a[i]){
21             int j=upper_bound(d+1, d+len+1, a[i])-d;
22             d[j]=a[i];
23             c[i]=j;
24         }
25     }
26     stack<int> s;
27     for(int i=n, j=len; i>=1; --i) {
28         if(c[i]==j) {
29             s.push(a[i]); 
30             --j;
31         }
32         if(j==0) break;
33     }
34     printf("max=%d
", len);
35     while(!s.empty()){
36         if(s.size()>1){
37             printf("%d ",s.top());
38             s.pop();}
39         else if(s.size()==1){
40             printf("%d",s.top());
41             s.pop();
42         }
43     }
44     return 0;
45 }

 

以上是关于模板:最长上升子序列(LIS)的主要内容,如果未能解决你的问题,请参考以下文章

最长上升子序列 (LIS) 详解+例题模板 (全)(转)

luogu1439 模板最长公共子序列 [动态规划][LIS最长上升子序列][离散化]

最长上升子序列(LIS)模板

模板:最长上升子序列(LIS)

最长上升子序列(模板)

[codevs3955]最长严格上升子序列(加强版)