64,659
社区成员
发帖
与我相关
我的任务
分享
#include <iostream.h>
#include <stdio.h>
#include <string.h>
void longest(int *a, int size)
{
int *d=new int[size]; //分配内存空间
int *p=new int[size]; //分配内存空间
d[size-1]=1;
for(int i=size-1;i>=0;i--)
{
int max=0;
int index=0;
for(int j=i;j<size;j++)
{
if(a[i]>a[j] && max <d[j])
{
max=d[j];
index=j;
}
}
if(max==0)
{
d[i]=1;
p[i]=-1;
}
else
{
d[i]=max+1;
p[i]=index;
}
}
//寻找最大子序列的起始下标
int max=0;
int max_index=0;
for( i=0;i<size;i++)
{
if(d[i]>max)
{
max=d[i];
max_index=i;
}
}
//从最大子序列的下标开始 输出子序列
cout<<"\n最长递减子序列的长度为:"<<d[max_index]<<",最长子序列为:"<<endl;
for( i=max_index;i!=-1;i=p[i])
{
cout<<a[i]<<" "<<ends;
}
delete [] d;
delete [] p;
}
void main()
{
int data[10]={1,2,5,4,3,2,7,8,9,0};
longest(data,10);
}
void main()
{
//int data[10]={1,2,5,4,3,2,7,8,9,0};
int data[20] = {0}, i = 0;
char ch = ' ';
while(ch != '\n')
{
cin >> data[i++];
ch = getchar();
}
longest(data,i);
}