动态规划练习一 最长上升子序列

上升子序列 Submit Statistic Problem Description 一个只包含非负整数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列{a1, a2, ...,aN},我们可以得到一些上升的子序列{ai1, ai2, ..., aiK},这里1 ≤ i1 < i2 <...< iK ≤ N。例如:对于序列{1, 7, 3, 5 阅读详情
描述
一个数的序列bi,当b1 <b2 < ... <bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2, ...,aN),我们可以得到一些上升的子序列(ai1,ai2, ...,aiK),这里1 <=i1 <i2 < ... <iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).

你的任务,就是对于给定的序列,求出最长上升子序列的长度。
输入
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
输出
最长上升子序列的长度。
样例输入
7
1 7 3 5 9 4 8

思路: a数组 盛放 输入的数字 , t 数组 是状态数组 , 以第 i 的数 做结尾的 一串数字 的最长上升子序列 有两个条件: 一是,第i个数字 比 前边的那个数字大,二是 找到 比它小的数字 的 最大的状态 ,然后加一 就是 第i的状态 。


代码:
#if  0 
#include<iostream>
using namespace std;
int main()

{
	int a[100] ,n ;
	
	cin >> n; 
	
	for(int i = 1 ;i <= n; i++) 
	cin >> a[i] ;
	
	int t[100]={0} ;
     t[1] = 1 ;
     int max=0,maxend=0;
     
    for(int i=2 ;i <=n ;i++) 
    { 
           max =0;                             // 细节 
        for(int j=1; j< i; j++)
    	{
		   if(a[i]>a[j]) 
		if( max<t[j] ) 
         	max = t[j] ;	
}
        t[i] =max +1 ;
       
	}
	
	
	for(int i= 1; i<= n;i ++)
	if(maxend<t[i])
         maxend = t[i] ;	
	cout << maxend <<endl;

}


#endif 



动态规划——最长上升子序列(LIS) 聪明人都会点进来学习!!动态规划看这一篇就够了!!!本文详细讲解了动态规划的核心思路(配有图片),还以经典问题——最长上升子序列为例,先从基础解法开始讲解思路,再一步步优化,带有完整代码(有详细注释),对于难以理解的地方还会举例讲解,还会对比思考,赶紧点进来学习吧!!! 阅读详情

相关推荐

图解动态规划:最长上升子序列

最长上升子序列(300) 在上一篇中,我们了解了什么是DP(动态规划),并且通过DP中的经典问题 “最大子序和”,学习了状态转移方程应该如何定义。在本节中,我们将沿用之前的分析方法,通过一道例题,进一步巩固之前的内容! 01、题目分析 第300题:最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种

Google大神 1808

最长上升子序列

题目描述 一个数的序列bi,当b1 2 S的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里11 2 K 你的任务,就是对于给定的序列,求出最长上升子序列的长度。 输入 输入的第一行是序列的长度N (1 输出 最长上升子序列的长度。 示例输入 7 1 7

u013087645的专栏 794

最长上升子序列——动态规划(C++详解)

题目描述 LIS(Longest Increasing Subsequence)最长上升子序列 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。 比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8). 对于给定的序...

weixin_45735431的博客 2967

动态规划——最长上升子序列问题

问题描述: 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。 比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3,

weixin_41174502的博客 2939

最长上升子序列(动态规划)

算法特点及适用场景该算法基于动态规划思想,通过定义合适的状态和状态转移方程,直观地解决了最长上升子序列问题。虽然时间复杂度为 ,在处理较长序列时效率可能不太理想,但代码实现相对简洁,易于理解,适合初学者学习动态规划算法的应用。适用于一些对时间复杂度要求不是特别苛刻,序列长度相对较短的场景,例如小型数据集的数据分析、简单的序列模式匹配等情况,只要涉及到找出给定序列中最长的上升子序列长度问题,都可以应用该算法思路进行初步尝试。注意事项及可能遇到的问题在代码实现方面,要注意dp。

m0_49844997的博客 1567

自然二进制数与格雷码的相互转换

自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。

Loudrs的博客 7494

程序设计基础II-实验 6 动态规划 7-3 最长上升子序列

一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1

m0_73688552的博客 224

PCB设计必看:铜皮厚度与载流能力对照表(附Excel计算工具)

本文深入解析了PCB设计中铜皮厚度与载流能力的核心关系,提供了基于IPC-2152标准的动态计算逻辑与实用Excel工具。文章不仅分享了载流对照表,更重点剖析了影响载流能力的关键因素(如铜厚、线宽、温升、布线层),并给出了高电流设计的实战技巧与测试验证方法,帮助工程师规避常见陷阱,实现从理论到实践的闭环设计。

weixin_29228781的博客 724

最大上升子序列和

最大上升子序列和 题目描述 : 一个数的序列bi,当b1<b2<…<bs的时候,我们称这个序列是上升的。 对于给定的一个序列(a1,a2,…,aN),我们可以得到一些上升的子序列(ai1,ai2,…,aik),其中1≤i1<i2<…<ik≤N。 比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8) 等等。 这些子序列中序列和最大为18,...

soul_mingling的博客 930

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 272

实战指南:基于ELK与Grafana构建天融信防火墙日志可视化看板

本文详细介绍了如何基于ELK与Grafana构建天融信防火墙日志可视化看板,包括环境准备、日志收集与解析配置、Elasticsearch存储优化、Grafana看板设计等关键步骤。通过实战案例和优化技巧,帮助用户高效处理天融信防火墙日志,实现安全态势的可视化监控与分析。

weixin_34246529的博客 226

动态规划练习一 01:最长上升子序列

描述 一个数的序列bi,当b1 < b2 bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 i2 iK 你的任务,就是对于给定的序列,求出最长上升子序列的长度。输入输入的第一行是序列的长度N (1 输出最长上升子序列的长度。样例输入 7 1 7

G_Meteor的博客 770

VSCode配置C/C++开发环境:从零安装MinGW-w64并运行第一个C程序

在Windows系统上搭建C语言开发环境时,很多初学者混淆编辑器、编译器与调试器的分工,导致配置过程屡屡受挫。理解VSCode作为轻量级编辑器的定位,以及MinGW-w64提供的gcc编译器在源码编译中的核心作用,是顺利完成环境配置的关键。环境变量的正确设置直接影响gcc命令能否全局调用,而C/C++插件则赋予编辑器语法高亮与智能提示能力。通过安装VSCode、配置MinGW-w64、安装插件、汉化界面并运行一个最简单的hello.c程序,就能系统掌握这套开源工具链的完整工作流。无论是用于课程学习、算法练习

weixin_42531923的博客 533

动态规划练习一—1最长上升子序列

1、题意:对于输入的数组,输出其上升子序列最长的长度 2、思路:对开始到结束,储存当前位置为子序列最后一位时最长的长度,当其位置最长长度为前一个比当前位置数值小的位置的长度+1; 3、感想:此题老师上课讲过,但是自己做的动态规划第一题,是思维打开的开端,比较易接受。 4、代码: #include using namespace std; int main() {     int n

AAAAAAAC的博客 342

基于 Python Flask 的智能个人财务系统

4.财务分析与报告:自动生成财务分析报告,提供图表展示(如饼图、柱状图)帮助用户了解收支状况和财务趋势。9.管理员管理功能:提供管理员模块,允许管理员查看用户财务数据、生成统计报告,并进行用户管理与权限控制。5.资产管理:用户可以记录并追踪个人资产(如房产、车辆、投资等),系统提供资产价值增减情况和趋势分析。3.预算制定与管理:用户根据收入设定每月预算,系统自动对比实际支出与预算差异,实时提醒预算完成情况。6.信用卡管理:提供信用卡账单记录与管理功能,提醒用户信用卡还款日期,避免逾期,帮助管理信用卡消费。

weixin_68689665的博客 424

79、昇腾系列服务器/昇腾系列推理卡/昇腾系列嵌入式开发板+Dify+one api部署DeepSeek-R1-Distill-Qwen-32BW8A8+RAG本地模型知识库和负载均衡双实例

阶段,安装过程缺什么,,在docker外面git下源码,进入容器内部进行量化,这里的容器建议在创建个8卡的容器,双卡容器量化会显示npu显存不够,除非你用cpu转模型,我就懒得创建容器了,使用cpu量化吧,巨慢;创建容器,进入容器,计划使用两张昇腾NPU卡推理DeepSeek-R1-Distill-Qwen-32B的W8A8模型,所以构建的容器用两张卡,选6、7卡吧,0-6号卡可以跑文本嵌入模型、重排序模型;直接进入量化阶段,在容器外面操作即可,环境不用管,因为系统已经默认配置了环境,直接跳到。

sxj731533730 6121

动态规划:线性DP

线性DP 定义         线性DP:即线性动态规划,不局限于“线性时间复杂度”的一维动态规划。与数学中的“线性空间”类似,如果一个动态规划算法的“状态”包含多个维度,但在每个维度上都具有“线性”变化的“阶段”,那么该动态规划算法同样称为“线性DP"。在这类问题中,需要计算的对象表现出明显的维度以及有序性,每个状态的求解...

正月看雪花的博客 531

uniapp - [微信小程序 | 安卓苹果app] 详细实现接入天地图完整流程,提供显示地图、IP 属地定位 / 用户定位的城市名称、用户定位的经纬度超多功能(复制运行示例代码,详细注释及常见问题)

uni-app,微信小程序,安卓app,苹果app,App端,支付宝小程序,nvue,天地图,国家天地图api,接入使用天地图,uniApp小程序端接入天地图,uniapp安卓苹果app端接入天地图,微信小程序平台如何引入天地图,天地图Api使用教程,如何在uniapp里集成天地图,使用天地图获取当前定位,天地图api教程,天地图官方文档,天地图详细使用教程,Uniapp项目如何使用天地图,项目引入天地图配置及使用教程,使用天地图获取用户定位,天地图获取用户当前位置信息(经纬度),如何通过天地图拿到用户定位

🏆 前端领域优质创作者 1万+

OpenJ_Bailian - 2757 最长上升子序列(基础动态规划)

最长上升子序列 Problem Description 一个数的序列 bi,当 b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列( a1, a2, …, aN),我们可以得到一些上升的子序列( ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N。比如,对于序列(1, 7, 3...

Sky丨Star的博客 258

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++动态规划之最长上升子序列

从图1中可以看出,在遍历素组中的元素时,如果该元素的值大于该元素之前的元素值时,就有可能构成上升子序列,此时需要找到之前元素对应的最长子序列的长度,找到这些长度的最大值,并且对该最大值加1,即为当前元素对应的最长子序列。例如序列A={1,3,5,4,2},删除其中的第3项和第5项,得到序列B={1,3,4},删除其中的第3项和第4项,得到序列C={1,3,2},此时序列B和C是序列A的子序列。例如,序列D={1,5},是序列A的上升子序列,但不是最长上升子序列,而序列B是A的最长上升子序列。

hou09tian的博客 8263

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

动态规划之 —— 最长上升子序列问题(一)

最长上升子序列问题也叫做LIS(LIS : longest increasing sequence) 最长上升子序列,顾名思义就是找到一串数组中,严格单调上升的子序列最大长度。 原题链接 (代码粘贴即可通过) 首先举个例子: 假如给定数组: [3 1 2 1 8 5 6] ,问题是找出这组数的最长上升子序列的长度。 很显然,使用暴力是很难去解决这道问题的,所以就使用到了动态规划。 对于这道题目,我们需要一个dp数组,来记录上升子序列的长度。 dp[i]表示以第i个数结尾的上升子序列的长度,那么我们最终要

qq_45260619的博客 4550

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

动态规划—最长上升子序列(POJ 1458)

本文主要介绍了 经典算法题 最长上升子序列的动态规划解法,同时用北大OJ的案例来补充说明,意在学习动态规划的基本思想和解题过程,供大家一起学习!

青春无问西东 岁月自成芳华 5040

『动态规划』最长上升子序列

给出一串正整数,如下 能找到最长的单调递增的子序列为 2. 动态规划法 2.1 设计思路 设b[i]是在a[i]为单调递增子序列最后一个元素时,所得最长单调递增子序列 的长度为:思路:最长递增子序列空间复杂度:S(n) 2.4 算法优化 2.4.1 优化分析 内层循环所作的操作是在区间找到比小且状态值最大的数,就是一个查找的过程,我们所熟知的二分查找的效率是,可不可以用二分来优化这个内层循环呢?维护两个数组我们所要做的操作就是依次遍历序列中后续元素,更新两个数组分析这么多其实理解了就是两行话老师的ppt绕

一个专注于客户端开发的技术er,不定期更新Android,Flutter,HormonyOS等方向的使用心得和感悟 3545

最长上升子序列【动态规划,二分查找】

题目描述 给定一个无序的整数数组,找到其中最长上升子序列的长度。 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 解法一 动态规划 思路:dp[i]表示直到第i个元素的最长上升子序列的长度,初始条件dp[i]=1。 dp[i]如何更新呢?若第i个值大于其前面某一个元素(假设索引为j),那么dp[i]=dp...

shahuzi的博客 7291

Java实现最长上升子序列(动态规划)

问题: 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为O(n2) 。 思路: 我们可以使用动态规划来进行解答 1,设置dp[]数组...

小仙女的博客 6559
上一篇: 递推递归练习 O - 螺旋方阵
下一篇: 动态规划练习一 02:最大子矩阵
Joined
博客等级 码龄10年 19粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值