51 Nod 1134 最长递增子序列 (动态规划基础)
原题链接:1134 最长递增子序列
题目分析:长度为  的数列 
 有多达 
 个子序列,但我们应用动态规划法仍可以很高效地求出最长递增子序列(
)。这里介绍两种方法。
先考虑用下列变量设计动态规划的算法。这里设输入数列的第一个数为  。
| 一位数组, | |
| 一位数组, | 
有了这些变量,动态规划法求  的算法便可以这样实现。
LIS()
    L[0] = 0
    A[0] = 0    // 选择小于 A[1] 到 A[n] 中任意一个数的值进行初始化
    P[0] = -1
    for i = 1 to n
        k = 0
        for j = 0 to i - 1
            if A[j] < A[i] && L[j] > L[k]
                k = j
        L[i] = L[k] + 1  // 满足 A[j] < A[i] 且 L[j] 最大的 j 即为 k
        P[i] = k         // LIS 中 A[i] 的前一个元素为 A[k]
            上述动态规划法的复杂度为 ,无法在限制时间内解开 
 的问题。因此我们需要考虑效率更高的解法。
实际上,只要把动态规划与二分搜索结合起来,就能进一步提高求解最长递增子序列的效率。这种算法要用到下列变量:
| 一维数组, | |
| 整数,表示前 | 
LIS()
    L[0] = A[0]
    length = 1
    for i = 1 to n - 1
        if L[length] < A[i]
            L[length++] = A[i]
        else
            L[j] (j = 0, 1, ..., length - 1) 中第一个大于等于 A[i] 的元素 = A[i]#include <iostream>
#include <algorithm>
#define MAX 100000
using namespace std;
long long n, A[MAX + 1], L[MAX];
int lcs() {
    L[0] = A[0];
    int length = 1;
    for (int i = 1; i < n; i++) {
        if (L[length - 1] < A[i]) {
            L[length++] = A[i];
        } else {
            *lower_bound(L, L + length, A[i]) = A[i];
        }
    }
    return length;
}
int main() {
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> A[i];
    cout << lcs() << endl;
    return 0;
}51 Nod 1134 最长递增子序列 (动态规划基础)的更多相关文章
- 51 Nod 1134 最长递增子序列(经典问题回顾)
		1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元 ... 
- 51Nod:1134 最长递增子序列
		动态规划 修改隐藏话题 1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递 ... 
- 51nod 1134 最长递增子序列
		题目链接:51nod 1134 最长递增子序列 #include<cstdio> #include<cstring> #include<algorithm> usi ... 
- 51nod 1134最长递增子序列
		1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素 ... 
- 51Nod - 1134 最长递增子序列【动态规划】
		给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个数N ... 
- LCS 51Nod 1134 最长递增子序列
		给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个 ... 
- 300. Longest Increasing Subsequence(LIS最长递增子序列  动态规划)
		Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ... 
- 51node 1134 最长递增子序列 (数据结构)
		题意: 最长递增子序列 思路: 普通的$O(n^2)$的会超时.. 然后在网上找到了另一种不是dp的写法,膜拜一下,自己写了一下解释 来自:https://blog.csdn.net/Adusts/a ... 
- LIS 51Nod 1134 最长递增子序列
		给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个 ... 
随机推荐
- [BUUCTF]REVERSE——[BJDCTF 2nd]guessgame
			[BJDCTF 2nd]guessgame 附件 步骤: 例行查壳儿,64位程序,没有壳儿 64位ida载入,习惯性的检索程序里的字符串,看到了一串类似flag的字符串,拿去提交,成功 BJD{S1m ... 
- MySQL管理之道,性能调优,高可用与监控(第二版)pdf下载
			MySQL管理之道,性能调优,高可用与监控(第二版) 书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和新知识的拓展,同时也针对运维人员.DBA等相关工作者会遇到的有代表性的疑难问题给出了 ... 
- 30个类手写Spring核心原理之动态数据源切换(8)
			本文节选自<Spring 5核心原理> 阅读本文之前,请先阅读以下内容: 30个类手写Spring核心原理之自定义ORM(上)(6) 30个类手写Spring核心原理之自定义ORM(下)( ... 
- java 多线程 发布订阅模式:发布者java.util.concurrent.SubmissionPublisher;订阅者java.util.concurrent.Flow.Subscriber
			1,什么是发布订阅模式? 在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者).而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话 ... 
- axiso 高级封装
			 import axios from 'axios'; import qs from 'qs'; const Unit = { async getApi(ajaxCfg){ let data = a ... 
- 优化vue+springboot项目页面响应时间:waiting(TTFB) 及content Download
			优化vue+springboot项目页面响应时间:waiting(TTFB) 及content Download TTFB全称Time To First Byte,是指网络请求被发起到从服务器接收到地 ... 
- 【LeetCode】1170. Compare Strings by Frequency of the Smallest Character 解题报告(C++)
			作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双重循环 日期 题目地址:https://leetc ... 
- 【LeetCode】414. Third Maximum Number 解题报告(Python & C++)
			作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换最大值数组 使用set 三个变量 日期 题目地址 ... 
- 1269 - Consecutive Sum
			1269 - Consecutive Sum PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB ... 
- springboot中word转pdf,加盖电子印章
			概述 在开发过程中,word转pdf的方式有很多种有jar包的方式,有安装openoffice的方式,但是使用有的jar包有license认证,不然会生成水印,综合几种方法我采用了libreoffic ... 
