最长递增子序列

来源:互联网 发布:资金流向分析软件 编辑:程序博客网 时间:2024/06/08 20:12

思路:n方的算法,简单的dp,输出路径使用记忆化搜索正序输出

#include<cstdio>#include<algorithm>using namespace std;int a[10000],f[10000],fa[10000];void showpath(int x){    if(x==fa[x])    {        printf("%d",a[x]);        return ;    }    showpath(fa[x]);    printf(" %d",a[x]);}int main(){    int n,i,j,flag;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)        scanf("%d",&a[i]);        for(i=0;i<n;i++)        fa[i]=i;        for(i=0;i<n;i++)        {            f[i]=1;            for(j=0;j<i;j++)            {                if(a[i]>a[j]&&f[i]<f[j]+1)                {                    f[i]=f[j]+1;                    fa[i]=j;                }            }        }        int ans=0;        for(i=0;i<n;i++)        {            if(ans<f[i])            {                ans=f[flag=i];            }        }        printf("%d\n",ans);        showpath(flag);    }    return 0;}


0 0
原创粉丝点击