最长不下降子序列问题:在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。
时间复杂度: O(n2)
//freopen("hao.txt","r",stdin);
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 10005;
int main()
{
int n = 0;
int data[N] = {0};
int f[N] = {0};
int max_length = 1;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>data[i];
f[i] = 1;
}
for(int i = 2;i <= n;i++){
for(int j = 1;j < i;j++){
if((data[j]<data[i])&&(f[i]<f[j]+1)){
f[i] = f[j]+1;
}
}
if(f[i]>max_length)
max_length = f[i];
}
cout<<max_length<<endl;
return 0;
}
样例输入:
7
1 7 3 5 9 4 8
样例输出:
4