#include<iostream>
#include<string.h>
#define N 8
using namespace std;
int a[N] = {5, 1, 2, 6, 5, 6,2,1 };
//int a[10] = {6,5,4,2,9,1,5,12,3,2};
int f[N];
int l[N];//表示路径。
int e = 0;
int main() //找最长递减子序列。
{
void printl(int); //用于打印路径
int i;
memset(l,-1,sizeof(l)); //memset 只能初始化0 和-1.
memset(f,0,sizeof(f));
f[0] = 1;
int max = f[0];
for(i = 1; i<N; i++)
{
for(int j = 0; j<i; j++)
if(a[i] < a[j] && f[i]<f[j])//a[j]<a[i]:递增子序列;a[j]<=a[i]不减子序列
{ //a[j]>a[i]:递减子序列;a[j]>=a[i]不增子序列
f[i] = f[j];
l[i] = j;
}
f[i] ++; //将自身加上。
if(max<f[i])
{
max = f[i];
e = i; //现在路径的end 位置。
}
}
// for(i = 0; i<N; i++)
// cout<<l[i]<<" ";
// cout<<endl;
// cout<<l[e];
// cout<<e<<endl;
cout<<max<<endl;
printl(e);
return 0;
}
void printl(int e)
{
if(l[e] != -1)
printl(l[e]);
cout<<a[e]<<" ";
}
最长有序子序列及其路径
最新推荐文章于 2021-01-16 16:57:34 发布