首页 > 其他分享 >【动态规划】最长不下降子序列

【动态规划】最长不下降子序列

时间:2024-08-15 19:28:57浏览次数:14  
标签:seq int 下降 序列 长度 动态 最长


题目描述
有长度为N的序列:
A1 A2 …..An
求最长不下降子序列:Ai1,Ai2,,,,,Aik, 其中ai1<=ai2<=.....<=aik
求最长不下降子序列的长度

输入
从文件 seq.in 中读入数据。

第一行,n; 
第二行,n 个数。

输出
输出到文件 seq.out 中。

最长不下降子序列的长度

样例输入 复制
11
1 3 6 3 4 7 5 7 6 7 8
样例输出 复制
8

如:1 3 3 4 5 6 7 8

正片开始!      
首先,按照国际惯例,这是一道十分淼的题(没做出的同学请冷静),本蒟蒻也才花了0.5小时才解出来

题意为:求最长不下降子序列的长度 ,注意:并不用连续

好,这很明显就是一道DP题,我们可以推导一下

首先,我们可以画一个图

图片加载不出来,自己可以点开看看

数组代表我们的输入,DP代表从第i个数开始,向后的最长不下降子序列,dp要初始化为1哦

然后呢,我们枚举i个数,看他的最长不下降子序列, 即

图片加载不出来,自己可以点开看看

OK,理论存存存在!,开始Code

#include <bits/stdc++.h>
using namespace std;
int n;
int a[999999], dp[999999];
int cnt = 1, ans;
int main() {
//	freopen("seq.in","r",stdin);
//	freopen("seq.out","w",stdout);
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) dp[i] = 1;//初始化
	for (int i = 2; i <= n; i++) {
		for (int j = 1; j < i; j++) {
			if (a[j] <= a[i])
				dp[i] = max(dp[j] + 1, dp[i]);//状态转移方程
		}
		ans = max(dp[i], ans);//得出最长子序列
	}
	cout << ans ;
	return 0;
}

标签:seq,int,下降,序列,长度,动态,最长
From: https://www.cnblogs.com/ACyming/p/18361640

相关文章

  • 【动态规划】0/1背包问题
    题目描述有个背包可承受重量N,现有T件物品每件物品重量为Wi,价值为Vi,每件物品只有一个,这个背包可以装载物品的最大价值是多少?输入从文件 beibao1.in 中读入数据。一行两个正整数NT,之间用空格隔开后面T行,每行两个正整数,分别表示重量Wi,价值Vi输出输出到文......
  • gym序列化、EzPickle类
    EzPickle是一个用于强化学习环境的类,它重写了__getstate__和__setstate__方法,以便通过构造函数参数(*args,**kwargs)进行序列化和反序列化。这个设计允许那些无法直接用pickle库处理的对象,如数据库连接和网络套接字,也能在保存和恢复时保持其状态。"""Classforpicklingandun......
  • 代码随想录算法训练营 | 动态规划 part01
    509.斐波那契数509.斐波那契数状态转移方程:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1递归,太多重复计算classSolution{public:intfib(intn){if(n==0||n==1){returnn;}returnfib(n-1)......
  • 电脑主板品牌型号序列号机器码错乱修改恢复方法
    维修主板BIOS,刷原厂BIOS文件没有序列号型号等等信息,或者各种原因消失如何恢复呢?1.重启电脑按del进入BIOS设置界面,查看主板详细型号。2.到主板官网下载对应型号的BIOS文件。3.amibcp打开bios文件,DMITables栏,里面有详细的主板品牌型号序列号版本信息,可以直接复制下来。4.电......
  • 搜参,序列生成,优化方法——穷举,greedy search,beamsearch,bayessearch, viterbisearch
    exhaustivesearch(穷举搜索)最直观的方法就是穷举所有可能的输出序列。从所有的排列组合中找到输出条件概率最大的序列。穷举搜索能保证全局最优,但计算复杂度太高,当输出词典稍微大一点根本无法使用。greedysearch(贪心搜索)贪心搜索在解码下一个选择的时候,直接选择条件概率最......
  • 3_无重复字符的最长子串
    3_无重复字符的最长子串【问题描述】给定一个字符串s,请你找出其中不含有重复字符最长子串的长度。示例:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。【算法设计思想】此题为典型的滑动窗口问题,这类问题的主要是处理数组或者字......
  • 【C++】动态内存(二)智能指针
    由于new和delete会造成一定程度的内存泄漏问题,以及内存所有权不清晰,因此引入自动销毁相应内存空间的智能指针。智能指针是抽象数据类型,本身具有析构函数,因此调用之后会自动调用析构函数,在析构函数中会自动调用delete来释放相应内存空间,因此不用手动显式的调用delete。【......
  • Windows通过dynv6提供免费的IPv6动态域名解析(DDNS)服务(注册服务的方式运行)
    Dynv6IPv6Updater项目简介特性使用方法环境依赖运行脚本参数说明示例日志输出Windows服务注册步骤1:下载并安装NSSM步骤2:准备Python环境和脚本步骤3:使用NSSM注册服务步骤4:启动服务并验证步骤5:设置日志记录(可选)步骤6:重启系统并验证附:以下为帮......
  • C#根据传入的字段名,动态分组,支持多字段分组
     分组方法DynamicLinqExtensions:///<summary>///动态构建分组表达式///</summary>///<typeparamname="T"></typeparam>///<paramname="propertyNames">上限最大7个元素</param>///<returns></returns>publ......