• 算法问题实战策略 LIS 动态规划


    地址 https://algospot.com/judge/problem/submit/LIS

     

     给出数组,输出该数组最长的递增子序列

    输入:

    第一行 样例组数N

    下面一行是数组的长度 和一行数组 元素以空格隔开

    。。。。一致输出到2N-1行与2N行

    输出:

    输出每个数组的最长递增子序列的长度 每行输出一个答案

    示例

    输入

    3
    4
    1 2 3 4
    8
    5 4 3 2 1 6 7 8 
    8
    5 6 7 8 1 2 3 4

    输出

    4
    4
    4

    解答

    动态规划

    dp[i]表示第i个元素的最长递增子序列的长度

    dp[i] = max(dp[1],dp[2].....dp[i-1]);

    代码

    #include <iostream>
    #include <algorithm>
    #include <memory.h>
    #include <vector>
    
    using namespace std;
    
    /*
    3
    4
    1 2 3 4
    8
    5 4 3 2 1 6 7 8
    8
    5 6 7 8 1 2 3 4
    输出示例
    4
    4
    4
    */
    const int N = 510;
    int arr[N]; int dp[N];
    int loop;
    int len;
    
    
    int main()
    {
    
        cin >> loop;
    
        while (loop--) {
            int ans = 1;
            memset(arr, 0, sizeof(arr));
            for (int i = 0; i < N; i++) dp[i] = 1;
            cin >> len;
            for (int i = 0; i < len; i++) {
                cin >> arr[i];
            }
            
            for (int i = 1; i < N; i++) {
                for (int j = i - 1; j >= 0; j--) {
                    if (arr[i] > arr[j]) {
                        dp[i] = max(dp[i],dp[j] + 1);
                        ans = max(ans, dp[i]);
                    }
                }
            }
    
            cout << ans << endl;
        }
    
    
        return 0;
    }
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    EVM靶机渗透
    Joomla漏洞复现
    渗透测试
    Kali软件库认识
    谷歌hack语法
    Metasploit学习
    sqli-labs less-17
    sqli-labs(less-11-16)
    sqli-labs (less-8-less-10)
    less-7
  • 原文地址:https://www.cnblogs.com/itdef/p/13331292.html
Copyright © 2020-2023  润新知