Longest Ordered Subsequence 问题,主要是说按顺序递增的子序列的最长的长度
基本解题思路在于维护一个数组dp[m],其中,每个dp[i]都代表以c[i]为结尾的序列的长度,最后,在dp[m]中选出最大的一个数值,即为最终结果。
代码如下
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
const int m = n;
int c[m];
for(int i = 0;i < n;i ++)
scanf("%d",c + i);
int dp[m];
for(int i = 0;i < n;i ++){
dp[i] = 1;
}
for(int i = 0;i < n;i ++){
int m = 1;
for(int j = 0;j < i;j ++){
if(c[j] < c[i]){
if(dp[j] + 1 > m)
m = dp[j] + 1;
}
}
dp[i] = m;
}
int max = 0;
for(int i = 0;i < n;i ++){
if(max < dp[i])
max = dp[i];
}
printf("%d\n",max);
return 0;
}