Acwing 895. 最长上升子序列
前面随便排序,最后两位ak与ai
** ak<ai ,否则无解**
状态表示
- 集合:所有以i结尾的严格单调上升子序列的集合
- 属性:最大值
状态计算
最后一个不同点为倒数第二个元素
划分为a1,a2…ai-1
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int f[N],a[N];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int res=1;
for(int i=1;i<=n;i++){
f[i]=1;
for(int j=1;j<i;j++){
if(a[j]<a[i]){
f[i]=max(f[i],f[j]+1);
}
}
res=max(res,f[i]);
}
cout<<res<<endl;
return 0;
}