本质是求最长的递增子序列长度!
实现的代码为:
#include<iostream>
using namespace std;
void LengthLIS(int arr[],int N){
int len[N],i,j,MaxLength=1;
int lenArr[N][N];
for(i=0;i<N;i++)
len[i]=1;
for(i=0;i<N;i++)
lenArr[i][0]=arr[i];
for(i=0;i<N-1;i++)
for(j=i-1;j>=0;j--){
if(arr[i]>arr[j]&&(len[j]+1)>MaxLength){
MaxLength=len[j]+1;
len[i]=MaxLength;
for(int k=0;k<len[j];k++)
lenArr[i][k]=lenArr[j][k];
lenArr[i][len[i]-1]=arr[i];
}
}
int index=0;
for(int i=0;i<N;i++)
if(len[i]>len[index]){
index=i;
}
cout<<len[index]<<endl;
}
int main(){
int arr[1000],N;
cin>>N;
for(int i=0;i<N;i++)
cin>>arr[i];
cout<<endl;
LengthLIS(arr,N);
return 0;
}
代码如有错误,欢迎大家指出!