做法这里就不展开讲讲了
只说oier懒的技巧
算法1
三遍循环
#include<bits/stdc++.h>
using namespace std;
int n;
int a[9000];
int f[9000];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
f[i]=1;
for(int j=0;j<i;j++){
if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
}
}
int res=0;
for(int i=0;i<n;i++){
res=max(f[i],res);
}
cout<<res;
return 0;
}
最后那个RES完全没必要
所以就有了最适合C++懒人oier体质的STL
二叉堆;
算法2 优先队列
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int a[N],f[N];
int n;
priority_queue<int> r;
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++){
f[i]=1;
for(int j=0;j<i;j++){
if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
}
r.push(f[i]);
}
cout<<r.top();
return 0;
}