输入整数n,接下来输入n个整数,求n个整数序列中最长的上升子序列
输出格式:
输出最长的上升子序列
输入样例:
8
1 5 6 2 4 7 9 8
输出样例:
2 4 7 9
#include<stdio.h>
typedef struct
{
int num[100];
int N;
} number;
int main()
{
number p[1000];
int n,i,a[1000],j=0,k=0,max=1;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
p[i].N=1;
}
for(i=0; i<n-1; i++)
{
if(a[i]<a[i+1])
{
p[k].num[j]=a[i];
p[k].N++,j++;
}
else if(a[i]>a[i+1])
{
if(p[k].N>max)
max=p[k].N;
p[k].num[j]=a[i];
k++,j=0;
}
}
for(; k>=0; k--)
if(p[k].N==max)
for(i=0; i<max; i++)
printf("%d ",p[k].num[i]);
return 0;
}
使用结构体可以将子序列保存下来,可以用递归的方法化简循环,用动态规划再对照做一遍(´・㉨・`)