0
点赞
收藏
分享

微信扫一扫

dp序列问题

mafa1993 2022-01-16 阅读 89

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;
}
举报

相关推荐

0 条评论