TOJ 1765. Longest Ordered Subsequence

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;
}
点赞