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

给出一个最长上升子序列的模板

#include<cstdio>
#include<algorithm>
using namespace std;
int c[1005];//原序列
int ans[1005];//以c[i]为末尾的最长上升子序列的长度
int main()
{
    
    
    int n,i,j,res=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
    
    
        scanf("%d",&c[i]);
    }
    for(i=1;i<=n;i++)
    {
    
    
        ans[i]=1;//只有一个数的最长上升子序列为1,注意初始化时不要搞错
        for(j=1;j<=i-1;j++)//第i个元素之前的所有元素
        {
    
    
            if(c[j]<c[i])ans[i]=max(ans[i],ans[j]+1);//dp思想,第i个点的最长上升子序列由其前面的元素确定
        }
        res=max(res,ans[i]);//寻找最长的上升子序列
    }
    printf("%d",res);//最长上升子序列的大小
    return 0;
}

猜你喜欢

转载自blog.csdn.net/upc122/article/details/105928828