最长不下降子序列,要求输出的是最长的那个序列数 和长度
长度我会 但是序列数怎么弄弄不出来啊 求助啊
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int longest_increasing(int num[],int n)
{
int lis[100000],j,maxn=0,i,b[10000],w=0;
for(i=0;i<n;i++)
{
if(num[i]==0)continue;
lis[i]=1;
for(j=0;j<i;j++)
if(num[i]>num[j]&&lis[j]+1>lis[i])
{lis[i]=lis[j]+1;
}}
for(i=0;i<n;i++)
if(maxn<lis[i])
{ maxn=lis[i];
}
return maxn;
}
int main()
{ printf("此程序用来计算最长不下降序列\n什么是最长不下降序列?\n设由n个不相同的整数组成的数列,a(1)、a(2)、……、a(n)且a(i)<>a(j) (i<>j)");
printf("\n例如3,18,7,14,10,12,23,41,16,24。\n若存在i1<i2<i3< … < ie 且有a(i1)<a(i2)< … <a(ie)则称为长度为e的不下降序列。");
printf("如上例中3,18,23,24就是一个长度为4的不下降序列,同时也有3,7,10,12,16,24长度为6的不下降序列。");
int num[100000],n,i,max,j,m,p;
printf("\n请输入数列数n,然后按回车键,将会为您自动生成n个数:");
scanf("%d",&n);//输入数据数量
srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样
//用时间做种,每次产生随机数不一样
printf("产生的随机数为:");
for (j=0; j<n;j++)
{
p=rand();
for(m=0;m<j;m++)
if( p==num[m]) //检查是否重复
break;
if(m>=j)
num[j]=p;
else
{
j--;
continue;
}
}
for (j=0; j<n;j++)
printf("%d ", num[j]);
system("pause");
printf("最长不下降序列长为 : %d \n",max);//打印最大值
return 0;
}
这个是我做的程序, 就差不知道怎么能输出最长的那个序列的 这些序列数呢