这个C++程序采用了最长降序子列算法,见答案讲就是创建两个数组,然后一个数组是用来存数(这个是进行比较的数),另外一个数组是用来进行存取每个数对应的最长降序子列的第一个数的多少。
第二个数组中序列的关系就是
void Lis(int k){
memset(longest,0,sizeof(longest));
for(int i=1;i<=k;i++){
longest[i]=1;
for(int j=1;j<i;j++){
if(Higest[i]<=Higest[j]){
int premax=longest[j]+1;
if(premax>longest[i]){
longest[i]=premax;
}
}
}
}
}
总的函数就是:
#include<iostream>
#include<cstring>
int longest[26];
int Higest[26];
using namespace std;
void Lis(int k){
memset(longest,0,sizeof(longest));
for(int i=1;i<=k;i++){
longest[i]=1;
for(int j=1;j<i;j++){
if(Higest[i]<=Higest[j]){
int premax=longest[j]+1;
if(premax>longest[i]){
longest[i]=premax;
}
}
}
}
}
int main(){
int k;
cin>>k;
if(k>26){
return false;
system("pause");
}
for(int i=1;i<=k;i++){
cin>>Higest[i];
}
Lis(k);
int max=-1;
for(int i=0;i<=k;i++){
if(max<longest[i]){
max=longest[i];
}
}
cout<<max<<endl;
return 0;
}
很经典的算法。