首页 > 其他分享 >简单动态规划:最长上升子序列

简单动态规划:最长上升子序列

时间:2023-01-05 12:55:06浏览次数:38  
标签:动态 int 序列 长度 上升 最长 dp

什么是最长上升子序列?

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

引自kkksc03校长的题面【狗头保命】
看懂了吧?那么,我们如何求一个序列的最长上升子序列呢?
还是DP大法好!

DP实现

以下是代码实现:

#include<bits/stdc++.h>
using namespace std;
int n;//序列长度
int a[5001];//记录序列
int dp[5001];//dp数组
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);//输入不多说
	}
	for(int i=0;i<=n;i++)dp[i]=1;//dp数组初始化
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i-1;j++){
			if(a[j]<a[i]){
				dp[i]=max(dp[i],dp[j]+1);
			}
		}
	}
	int ans=-1;
	for(int i=1;i<=n;i++){
		ans=max(ans,dp[i]);//遍历出最大值
	}
	cout<<ans;//输出答案
	return 0;
}

dp数组什么用处?
dp[i]表示的是截止到第i个数,最长上升子序列的长度。
dp的主要思想:
首先,如果已有一个上升子序列,后面有一个数比该序列最后一个数要大,我们可以确定这个数能和原序列组成一个更长的上升子序列。这一点需要明确。
a[j]<a[i]就是用来判断是否出现这种情况。
然后就是我们的状转方程:
dp[i]=max(dp[i],dp[j]+1)
在原最长序列长度和后来这个,dp[j]+1之间取一个最大值。
我们就会发现,到了最后,dp数组里的最大值就是最长上升子序列的长度了!
好像也不是很难……
ε=ε=ε=┏(゜ロ゜;)┛

标签:动态,int,序列,长度,上升,最长,dp
From: https://www.cnblogs.com/mornhus-xsylf-123/p/17027243.html

相关文章

  • 静态链接库与动态链接库
    ​​静态链接库​​​​动态链接库​​​​浅谈Windows平台下C++调用静态链接库的方式​​​​lib文件​​​​Windows动态链接库DLL使用​​​​WindowsAPI编程之动态链......
  • LeetCode 5_最长回文子串
    LeetCode5:最长回文子串题目给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"b......
  • 动态规划 - 股票
    动态规划的本质是从子状态推出当前状态,且无后效性;需要我们合理地定义状态。对于股票的最大利润,决定性的状态因素有三个:第i天结束时,最多能进行k次交易,当前是否持有股......
  • ArrayList的二进制序列化及反序列化实现
    usingSystem;usingSystem.Collections.Generic;usingSystem.Collections;usingSystem.Text;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.IO;us......
  • 基于目标检测和从粗到精静态概率的动态场景视觉SLAM算法CFP-SLAM
    以下内容来自从零开始机器人SLAM知识星球每日更新内容点击领取学习资料→机器人SLAM学习资料大礼包论文#CFP-SLAM:AReal-timeVisualSLAMBasedonCoarse-to-Fin......
  • 动态共享库/静态共享库
    0.前言在学习如何制作静态库和共享库之前,我们来了解GCC编译器的基本工作流程和GCC常用参数的使用。1.GCC基本工作流程现在假设有一个helloworld.c源程序,功能是只打印Hel......
  • 数据分享|R语言分析上海空气质量指数数据:kmean聚类、层次聚类、时间序列分析:arima模型
    全文链接:http://tecdat.cn/?p=30131最近我们被客户要求撰写关于上海空气质量指数的研究报告,包括一些图形和统计输出。最近我们被客户要求撰写关于上海空气质量指数的研究......
  • 牛客进阶题目4:输入序列不连续的序列检测
    跟上一题基本类似,多了个valid判定当前输入数据是否有效`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, inputdata, inputdata_valid, outpu......
  • Django-restframework 序列化器与反序列化器
    序列化器restframework中提供了所有可用的序列化器基类,引用方法如下:fromrest_frameworkimportserializersSerializer:序列化器基类,drf中所有的序列化器都必须继承于S......
  • 习题2.5 两个有序链表序列的合并 (15 分)
    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:ListMerge(ListL1,ListL2);其中List结构定义如下:typedefstructNode......