当前位置:网站首页>ACM最长不下降子序列问题

ACM最长不下降子序列问题

2022-08-09 11:02:00 抓个马尾女孩

给定一串数,求出其最长不下降子序列
本题是经典的一道dp线性问题,定义一个三维数组,a[i][1]表示数值,a【i】【2】表示i到n最长的子序列长度,a【i】【3】表示i子序列后跟的数的位置。

#include<iostream>
using namespace std;
int a[100][10],k,l;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i=i+1)
    {
    cin>>a[i][1];
    a[i][2]=1;
    a[i][3]=0;
    }
    for(int i=n-1;i>=1;i=i-1)
    {
        k=0;
        l=0;
        for(int j=i+1;j<=n;j=j+1)
        if((a[j][1]>a[i][1])&&a[j][2]>l)
        {
            k=j;
            l=a[j][2];
        }
        if(l>0)
        {
            a[i][2]=l+1;
            a[i][3]=k;
        }
    }
    k=1;
    for(int i=1;i<=n;i=i+1)
        if(a[i][2]>a[k][2])
        k=i;
    cout<<"max= "<<a[k][2]<<endl;
    while(k!=0)
    {
        cout<<a[k][1]<<' ';
        k=a[k][3];
    }
    return 0;
}
原网站

版权声明
本文为[抓个马尾女孩]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_44563460/article/details/89042082