一、题目描述
求最长不下降子序列的长度
二、输入格式
第一行为n,表示n个数 第二行n个数
三、输出格式
最长不下降子序列的长度
四、输入样例及输出样例
输入:
7
77 81 22 33 91 74 90
输出 :
4
五、题目分析
本题为非常经典的动态规划题目,用动态规划解。
数据结构:
为满足题目需要,我们定义了一个5000行(多定义一点),4列的二维数组。
直接上代码:
#include<bits/stdc++.h>
using namespace std;
int a[5000][4];//为了题目需要定义的二维数组
int main(){
int n,l,k;
cin>>n;
if(n>0){
for(int i=1;i<=n;i++){
cin>>a[i][1];
a[i][2]=1;
a[i][3]=0;
}
for(int i=n-1;i>=1;i--){
l=0;
k=0;
for(int j=i+1;j<=n;j++){
if((a[j][1]>a[i][1])&&(a[j][2]>l)){
l=a[j][2];
k=j;
}
}
if(l>0){
a[i][2]=l+1;
a[i][3]=k;
}
}
k=1;
for(int j=1;j<=n;j++){
if(a[j][2]>a[k][2]){
k=j;
}
}
cout<<a[k][2];
}
return 0;
}