B3637 最长上升子序列

最长上升子序列

题目描述

这是一个简单的动规板子题。

给出一个由 n ( n ≤ 5000 ) n(n\le 5000) n(n5000) 个不超过 1 0 6 10^6 106 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。

最长上升子序列是指,从原序列中按顺序取出一些数字排在一起,这些数字是逐渐增大的。

输入格式

第一行,一个整数 n n n,表示序列长度。

第二行有 n n n 个整数,表示这个序列。

输出格式

一个整数表示答案。

样例 #1

样例输入 #1

6
1 2 4 1 3 4

样例输出 #1

4

提示

分别取出 1 1 1 2 2 2 3 3 3 4 4 4 即可。

题意

给出一个由 n ( n ≤ 5000 ) n(n\le 5000) n(n5000) 个不超过 1 0 6 10^6 106 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。

正解

动态规划(DP)。

动态规划分为三部分:

一、确定状态:确定 dp 数组里装的是什么,像这道题要求最长上升子序列的长度, d p i dp_i dpi 存的就是 a 1 , a 2 , … , a i a_1,a_2,\dots,a_i a1,a2,,ai 的最长上升子序列的长度。

二、确定转移公式:dp 的思想就是从以前的答案转移过来,所以要确定转移公式。如果 a j < a i ( j < i ) a_j<a_i(j<i) aj<ai(j<i),那么 a i , a j a_i,a_j ai,aj 就是一个上升子序列,那么 d p i = d p j + 1 dp_i=dp_j+1 dpi=dpj+1,所以转移公式就是:

for (int j = 1;j < i;j++)if (a[j] < a[i])dp[i] = max(dp[i],dp[j]+1);

但是如果 a i a_i ai 前面的数都比它大,那么 d p i dp_i dpi 就得设置一个初始值 1 1 1。也就是:

for (int i = 1;i <= n;i++)
{dp[i] = 1;for (int j = 1;j < i;j++)if (a[j] < a[i])dp[i] = max(dp[i],dp[j]+1);
}

三、确定最后的答案:在这里,最后的答案应该是 max ⁡ ( d p 1 , d p 2 , … , d p n ) \max(dp_1,dp_2,\dots,dp_n) max(dp1,dp2,,dpn)。也就是:

int mx = 0;
for (int i = 1;i <= n;i++)mx = max(mx,dp[i]);
cout << mx;

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;int n,a[5010];
int dp[5010];void solve()
{cin >> n;for (int i = 1;i <= n;i++)cin >> a[i];for (int i = 1;i <= n;i++){dp[i] = 1;for (int j = 1;j < i;j++)if (a[j] < a[i])dp[i] = max(dp[i],dp[j]+1);}int mx = 0;for (int i = 1;i <= n;i++)mx = max(mx,dp[i]);cout << mx;
}signed main()
{solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品创新:驱动企业增长的核心动力

在当今快速变化的市场环境中&#xff0c;产品创新已成为企业生存和发展的关键。产品创新不仅涉及全新产品或服务的开发&#xff0c;也包括对现有产品或服务的持续改进和优化。本文将深入探讨产品创新的定义、重要性以及如何通过创新驱动企业增长&#xff0c;并结合实际案例进行…

Java核心: JarIndex的使用

在讲解Java类加载器的时候&#xff0c;我们发现URLClassLoader加载类或资源时通过访问ClassPath下的每一个路径&#xff0c;来确定类是否存在的&#xff0c;假设我们执行的命令是这样的 java -classpath D:\DiveInSpring\target\classes;C:\lib\spring-expression.jar;C:\lib\…

力扣第196题“删除重复的电子邮件

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在本篇文章中&#xff0c;我们将详细解读力扣第196题“删除重复的电子邮件”。通过学习本篇文章&#xff0c;读者将掌握如何使用SQL语句来解决这一问题&#xff0c;并了解相关的…

前端下载图片的几种方式

1.后端返回文件流&#xff0c;前端利用Blob解析文件流下载 2.下载资源必须是与页面地址同源时&#xff0c;直接利用a标签下载 注意点&#xff1a;下载资源必须与页面地址同源 3.利用fetch或者xhr从图片地址获取二进制数据&#xff08;blob&#xff09;进行下载 代码如下&am…

Robust Tiny Object Detection in Aerial Images amidst Label Noise

文章目录 AbstractIntroductionRelated WorkMethodsClass-aware Label CorrectionUpdateFilteringTrend-guided Learning StrategyTrend-guided Label ReweightingRecurrent Box RegenerationExperimentpaper Abstract 精确检测遥感图像中的小目标非常困难,因为这类目标视觉信…

Facebook开户|Facebook广告设计与测试优化

早上好家人们~今天Zoey给大家伙带来的是Facebook广告设计与测试优化&#xff0c;需要的家人们看过来啦&#xff01; 一、避免复杂用图和过多的文字 根据Facebook的数据显示&#xff0c;用户平均浏览一个贴文的时间在手机上仅花1.7秒、在电脑上则为2.5秒。因此&#xff0c;广告…

【Linux】进程7——进程地址空间

1.再谈fork 之前提到了fork之后对父子进程返回不同的id值&#xff0c;给父进程返回子进程的pid&#xff0c;给子进程返回0&#xff0c;所以对于一个id如何存储两个值的说法&#xff0c;在我们之前已经提到过了一个概念叫做写时拷贝&#xff0c;就是在子进程要想修改父进程的id…

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题 我们的简约风格&#xff0c;以纯洁的白色和深邃的紫色为主色调&#xff0c;为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中&#xff0c;您可以轻松畅享各种精彩短视频。我们专注于简单的…

C++命名空间的定义、C++命名空间的使用、C++输入输出等的介绍

文章目录 前言一、C命名空间的定义1. C命名空间产生的原因2. 作用域限定符3. C变量的访问顺序 二、C命名空间的使用1. 加命名空间名称及作用域限定符2. 使用using将命名空间中某个成员引入3. 使用using namespace 命名空间名称 引入4. 嵌套命名空间使用 三、 C输入&输出总结…

向AI请教如何说不

面对父母的催婚&#xff0c;你可以采取以下几个步骤来进行沟通和表达自己的立场&#xff1a; 理解与尊重&#xff1a;首先&#xff0c;要理解父母催婚背后的关心和期望。他们可能出于对你未来幸福和生活稳定的考虑。表达对他们关心的感激&#xff0c;这有助于建立良好的沟通基础…

超详解——python条件和循环——小白篇

目录 1. 缩进和悬挂else 2. 条件表达式 3. 和循环搭配的else 4. 可调用对象 总结&#xff1a; 1. 缩进和悬挂else 在Python中&#xff0c;代码块是通过缩进来表示的。条件判断和循环结构的代码块需要正确缩进。悬挂else指的是else子句和相应的if或循环在同一级别的缩进。 …

⌈ 传知代码 ⌋ 基于曲率的图重新布线

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

扩散模型Stable Diffusion

扩散模型构成 Text Encoder(CLIPText) Clip Text为文本编码器。以77 token为输入&#xff0c;输出为77 token 嵌入向量&#xff0c;每个向量有768维度。 Diffusion(UNetScheduler) 在潜在空间中逐步处理扩散信息。以文本嵌入向量和由噪声组成的起始多维数组为输入&#xff0c…

1909java内部知识管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java内部知识管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开 发环境为TOMCAT7.0,Myeclipse8.5开发&…

近邻算法的详细介绍

近邻算法&#xff08;Nearest Neighbor Algorithm&#xff09;&#xff0c;通常称为 k-近邻算法&#xff08;k-Nearest Neighbors&#xff0c;简称 k-NN&#xff09;&#xff0c;是一种基本的分类和回归方法。它的工作原理非常直观&#xff1a;通过测量不同特征值之间的距离来进…

Matlab速通知识点(半小时速通)

#跟着网上课程学习了matlab的基础用法&#xff0c;在这里给大家整合出来&#xff0c;形成知识点的形式&#xff0c;以便大家查阅或者学习&#xff0c;知识点全&#xff0c;有注解~ %% a[1,2,3;4,5,6;7,8,9];%矩阵写法b1:1:10;%开始&#xff1a;步长&#xff1a;结束c1:10;%遇上…

热题系列章节5

169. 多数元素 给定一个大小为 n 的数组&#xff0c;找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出:…

数据仓库核心:事实表深度解析与设计指南

文章目录 1. 引言1.1基本概念1.2 事实表定义 2. 设计原则2.1 原则一&#xff1a;全面覆盖业务相关事实2.2 原则二&#xff1a;精选与业务过程紧密相关的事实2.3 原则三&#xff1a;拆分不可加事实为可加度量2.4 原则四&#xff1a;明确声明事实表的粒度2.5 原则五&#xff1a;避…

数据结构(4):串

只需要掌握小题&#xff0c;在考纲中占比不大 1 串的定义 1.1 基本定义 字符串 数据结构三要数&#xff1a;逻辑结构、存储结构、运算 子串必须是连续的&#xff01; 空格也是一个字符&#xff01;每个空格字符占1B 1.2 串和线性表 2 串的基本操作 比值的操作&#xff01;&…

rocketmq做了哪些事情来提高性能

在中间件和消息队列的领域内&#xff0c;Apache RocketMQ是一个高性能、高吞吐量的分布式消息中间件&#xff0c;它被广泛应用于处理大规模消息服务的构建中。为了达到这样的性能标准&#xff0c;RocketMQ不仅在架构设计上进行了优化&#xff0c;还在代码层面进行了大量的重构和…