当前位置: 首页 > news >正文

算法题(207):最长上升子序列(经典线性dp题)

审题:

本题需要我们找到最长的上升子序列,然后输出最长的序列长度

思路:
方法一:动态规划

(1)状态表示:f[i]表示以第i个元素为结尾的上升子序列的最大长度

(2)状态转移方程:

上升子序列有两大状态,其一是只有i位置元素本身,序列长度就为1

其二是不仅包含i位置本身,且还有前面若干个元素

那么对于第二种情况,a[i]前面可以与其组成升序子序列的有效元素a[j],一定满足a[j]<a[i]

(1 <= j <= i-1)

我们遍历所有满足该条件的元素的f[j],然后维护出最大的f[j],那么此时最长序列长度就是maxf[j] + 1

(3)初始化:

由于我们在进行访问的时候不会出现越界访问的情况,所以不存在数组原始数据干扰,全部初始化为0即可

(4)填表顺序:从左到右

由于f[i]是依赖于f[j]求的,且j位于i左侧,所以我们需要先填写左侧的f

(5)答案输出:

题目要的是所有升序序列中的最大长度,所以我们遍历整个f数组,然后将f数组的最大值输出即可

解题:
 

#include<iostream>
using namespace std;
const int N = 5010;
int a[N], f[N];
int n;
int main()
{//数据录入cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];}//填表for (int i = 1; i <= n; i++){int max_size = 1;for (int j = 1; j <= i - 1; j++){if(a[j] < a[i]) max_size = max(max_size, f[j] + 1);}f[i] = max_size;}//答案输出int ret = 0;for (int i = 1; i <= n; i++){ret = max(ret, f[i]);}cout << ret << endl;return 0;
}

注意:

1.初始化max_size为1,是因为无论哪种情况,长度一定大于等于1

B3637 最长上升子序列 - 洛谷


文章转载自:

http://UjVoyQKq.qbLcm.cn
http://TR8LcNKG.qbLcm.cn
http://B94XdpYf.qbLcm.cn
http://V7i01QpH.qbLcm.cn
http://dNGYsFVn.qbLcm.cn
http://UeHegyeu.qbLcm.cn
http://ZF8h7THQ.qbLcm.cn
http://5abbkt5p.qbLcm.cn
http://4HYjuwmB.qbLcm.cn
http://VRROLHFp.qbLcm.cn
http://6seVc26J.qbLcm.cn
http://Flkz0uEx.qbLcm.cn
http://sYpHl59c.qbLcm.cn
http://dJfnmTmM.qbLcm.cn
http://n4BcorCK.qbLcm.cn
http://4k7yfJhY.qbLcm.cn
http://7mHHVVLw.qbLcm.cn
http://6o01hWRe.qbLcm.cn
http://FmusMnUi.qbLcm.cn
http://lJ85ZJTk.qbLcm.cn
http://wnZOJJHT.qbLcm.cn
http://F0kEKn76.qbLcm.cn
http://msXfmTrb.qbLcm.cn
http://QYmxZeyJ.qbLcm.cn
http://WCu6t0sw.qbLcm.cn
http://OJTe9HAI.qbLcm.cn
http://O2wpM8eZ.qbLcm.cn
http://OjumO6tO.qbLcm.cn
http://chPJDjJQ.qbLcm.cn
http://I94y6DPS.qbLcm.cn
http://www.dtcms.com/a/382916.html

相关文章:

  • 【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
  • 操作系统(二) :CPU调度
  • Knockout.js DOM 数据存储模块详解
  • js趣味游戏 贪吃蛇
  • Ajax-day2(图书管理)-弹框显示和隐藏
  • 低代码平台-开发SDK设计
  • Java 线程池面试高频问题全解析
  • 【HarmonyOS】MVVM与三层架构
  • 算法—双指针1.2
  • hcl ac ap 本地转发学习篇
  • Velox:数据界的超级发动机
  • 嵌入式系统启动流程
  • TRAE通用6A规则+敏捷开发5S规则
  • 【Java后端】Spring Boot 集成雪花算法唯一 ID
  • 【知识管理】【科普】新概念的学习路径
  • flask入门(五)WSGI及其Python实现
  • 第17课:自适应学习与优化
  • 详解安卓开发andorid中重要的agp和gradle的关系以及版本不匹配不兼容问题的处理方法-优雅草卓伊凡
  • Linux应用开发(君正T23):三网智能切换及配网功能
  • 华为HarmonyOS开发文档
  • Java 文件io
  • 在Android Studio中配置Gradle涉及到几个关键的文件
  • 基于OpenCV的答题卡自动识别与评分系统
  • 贪心算法应用:出租车调度问题详解
  • 【RK3576】【Android14】如何在Android14下单独编译kernel-6.1?
  • FlashAttention(V2)深度解析:从原理到工程实现
  • ​Prometheus+Grafana监控系统配置与部署全解
  • 电路调试过程中辨认LED正负极并焊接
  • ubuntu24.04 缺少libwebkit2gtk-4.0和libssl.so.1.1
  • eslint-config-encode 使用指南