标题:求出最长子序列长度后怎样显示最长子序列元素值
取消只看楼主
canhui87
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-2
 问题点数:0 回复次数:2 
求出最长子序列长度后怎样显示最长子序列元素值
对以下2个求最长子序列的程序
在最长子序列长度时,怎样显示最长子序列的元素值
或这用一个数组来存储最长子序列中结尾元素最小的一组

一个为 O(n^2)的

#include <stdio.h>

int a[10]={1,4,7,20,2,11,5,13,6,10};
int b[10]={0};          //b[i]存以a[i]为结尾元素的最长子序列长度
int c[10]={0};          //c[n]存a[n]最长子序列元素
int LISdyna()
{
    int maxL(int n);
    int i,j,k,n=10;

    for(i=1,b[0]=1;i <n;i++)
    {
        for(j=0,k=0;j <i;j++)
            if(a[j] <=a[i]&&k <b[j]) k=b[j];
        b[i]=k+1;
    }
    return maxL(n);
}

int maxL(int n)            //max(b[i])为a[n]最长子序列长度
{
    int i,temp;
    for(i=0,temp=0;i <n;i++)
        if(b[i]>temp) temp=b[i];
    return temp;
}

int main()
{
    int i,j,k=LISdyna();
    printf("%d\n",k);      //k为a[n]最长子序列长度
   
    return 0;
}
搜索更多相关主题的帖子: 序列 长子 元素 长度 
2008-11-21 11:46
canhui87
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-2
得分:0 
一个为 O(nlbn)的
#include <stdio.h>

int a[10]={1,4,22,20,11,2,5,13,6,4};
int b[10]={0};

int LIS()
{
    int binary(int i,int k);
    int i,j,k,n=10;
    b[1]=a[0];
    for(i=1,k=1;i <n;i++)
    {
        if(a[i]>=b[k]) b[++k]=a[i];
        else b[binary(i,k)]=a[i];
    }
    return k;
}

int binary(int i,int k)
{
    int h,j;
    if(a[i] <b[1])return 1;
    for(h=1,j=k;h!=j-1;)
    {
        if(b[k=(h+j)/2] <=a[i]) h=k;
        else j=k;
    }
    return j;
}

int main()
{
    printf("%d\n",LIS());

    return 0;
}
2008-11-21 11:46
canhui87
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-10-2
得分:0 
记录转移方式?
小弟不懂
希望能讲具体点
当作多学一个知识
2008-11-22 01:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-245534-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.329912 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved