算法每日一题——第八天——最长上升子序列

简介: 算法每日一题——第八天——最长上升子序列


原题链接:

             力扣

             895. 最长上升子序列 - AcWing题库

这是一道动态规划问题 ,首先我们建立一个dp数组,来记录上升序列的长度。

dp[ i ]表示以第 i 个数结尾的上升序列序列长度,最后dp数组中的最大值就是最长上升序列的长度,状态转移方程如下:

dp[ i ] = max( dp[ j ] ) + 1,其中0 ≤ j < i且num[ j ] < num[ i ]

因为最短的序列长度都是1,所以我们可以将dp数组全部初始化为1 。

完整代码如下:

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int arr[n];
    int dp[n];
    for(int i = 0 ; i < n ; i++){
        scanf("%d",&arr[i]);
        dp[i] = 1;
    }
    int max = 0;
    for(int i = 1 ; i < n ; i++){
        for(int j = 0 ; j < i ; j++){
            if(arr[i] > arr[j]){
                if(dp[j] > max){
                    max = dp[j];
                }
            }
        }
        dp[i] += max;
        max = 0;
    }
    max = 0;
    for(int i = 0 ; i < n ; i++){
        if(max < dp[i]) max = dp[i];
    }
    printf("%d" , max  );
}
相关文章
|
1月前
|
存储 算法 索引
模拟算法题练习(二)(DNA序列修正、无尽的石头)
模拟算法题练习(二)(DNA序列修正、无尽的石头)
|
2月前
|
算法 C++
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
【动态规划】【子序列除重】【C++算法】1987不同的好子序列数目
|
2月前
|
人工智能 算法 测试技术
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
【动态规划】【字符串】【C++算法】940. 不同的子序列 II
|
2月前
|
机器学习/深度学习 算法 测试技术
【动态规划】C++算法:446等差数列划分 II - 子序列
【动态规划】C++算法:446等差数列划分 II - 子序列
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
[Java·算法·简单] LeetCode 392. 判断子序列 详细解读
28 0
|
2月前
|
编解码 算法 定位技术
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
78 3
|
1天前
|
编解码 算法 数据可视化
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
|
9天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
30 1
|
16天前
|
存储 算法
算法系列--动态规划--子序列(2)(下)
算法系列--动态规划--子序列(2)(下)
22 0
|
25天前
|
存储 算法
从动态规划到贪心算法:最长递增子序列问题的方法全解析
从动态规划到贪心算法:最长递增子序列问题的方法全解析
21 2