设辅助数组b,定义b[i]表示以a[i]为结尾的最长递增子数列的长度。则:
转移方程:
b[1]=1;
b[i]=max{b[k]+1}; 1=<i<=n, 1=<k<i 且
#include<iostream>
#include<algorithm>
#define MAX 100
using namespace std;
int main(){
int a[MAX],b[MAX],visit[MAX];
int n;
while(cin>>n){
int max=0,v=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(visit,0,sizeof(visit));
for(int i=1;i<=n;i++){
cin>>a[i];
}
b[1]=1;
for(int i=2;i<=n;i++){
max=0;
for(int k=1;k<i;k++){
if(a[k]<a[i])
if(b[k]>max){
max=b[k];
v=k;
}
}
b[i]=max+1;
visit[v]=1;
}
sort(b+1,b+n);
cout<<b[n]<<endl;
}
return 0;
}
a[k]<a[i];