1259:【例9.3】求最长不下降序列 动态规划

1259:【例9.3】求最长不下降序列
题目链接
【输入样例】
在这里插入图片描述
【输入样例】

14
13 7 9 16 38 24 37 18 44 19 21 22 63 15

【输出样例】

max=8
7 9 16 18 19 21 22 63

思路:

  • 确定状态: a[n]数组放数据, dp[n]数组放第i个位子前最长子序列长度(必须包含该数)

    • 由于需要求出序列,所以还需要一个数组,f[n]用于放第i个位子前一个数据的下标

    • 确定了前后关系还要确定哪些是一个序列,但是由于一个序列里面吗不存在某一个数据的前一个数据的f[i]重合,所以只知道哪条序列最长时确定该数据的下标所在位置,然后回溯取值就行

      在这里插入图片描述

    • 回溯时,因为要正序输出,所以可以放到数组b[n]里面即可

  • 明确选择、dp函数确定: 某一个位子要想序列最长,就要接在前面数据中序列最长的数据的后面(必须满足不降) dp[i] max(dp[j]+1,1)

  • 边界条件: 每一个数据最短为1 所以需要设置dp[i] =1
    小声嘀咕:当运行后有时候出现错误,偶尔又能全过,不用怀疑代码,因为这个题当最大长度一致时,只需要输出一个序列即可,所以系统有时候会给出的代码和结果不一样,所以检测不出来? 我觉得是这样的,真的不要执着这个是自己的问题。 若该想法有误,欢迎指正

参考代码:

#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 205; 
int dp[MAX_N],a[MAX_N],b[MAX_N];//储存I位置所包含的最大长度 
int main(){int k,ma=0,f[MAX_N],mn=0;//ma存储串的长度最大值 ,mn储存长度最大所处的位置 cin>>k;for(int i=1;i<=k;i++){cin>>a[i];}for(int i=1;i<=k;i++){dp[i]=1; for(int j=1;j<i;j++){if(a[j]<=a[i]){if(dp[j]+1>dp[i]) {dp[i] = dp[j]+1	;f[i] = j; //记录该数据所处串的前驱 }}}if(dp[i]>ma){ma = dp[i]; //存最长值 mn = i;  //存当前位置 }} //得到最大长度和所处下标。开始回溯得到该串 int p = ma;while(mn){b[p--] = a[mn];mn = f[mn];}cout<<"max="<<ma<<endl;for(int i=1;i<=ma;i++){cout<<b[i]<<" ";} 
}

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

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

相关文章

kafka发送消息-生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略)

生产者发送消息的分区策略&#xff08;消息发送到哪个分区中&#xff1f;是什么策略&#xff09; 1、默认策略&#xff0c;程序自动计算并指定分区1.1、指定key&#xff0c;不指定分区1.2、不指定key&#xff0c;不指定分区 2、轮询分配策略RoundRobinPartitioner2.1、创建配置…

Linux网络:网络基础

Linux网络&#xff1a;网络基础 一、网络诞生背景及产生的诸多问题1. 1 网络诞生背景1.2 网络诞生面临的困境 二、网络协议栈&#xff08;OSI七层模型、CP/IP五层模型&#xff09;2.1 TCP/IP五层(或四层)模型 三、网络和系统关系四、网络传输流程4.1 同一个局域网中的两台主机进…

折腾 Quickwit,Rust 编写的分布式搜索引擎-官方教程

快速上手 在本快速入门指南中&#xff0c;我们将安装 Quickwit&#xff0c;创建一个索引&#xff0c;添加文档&#xff0c;最后执行搜索查询。本指南中使用的所有 Quickwit 命令都在 CLI 参考文档 中进行了记录。 https://quickwit.io/docs/main-branch/reference/cli 使用 Qui…

如何在Ubuntu 16.04上更新Firefox版本

如何在Ubuntu 16.04上更新Firefox版本 在Ubuntu 16.04上更新Firefox版本有多种方法&#xff0c;每种方法都有其优点。下面我们将介绍几种常见的方法&#xff0c;帮助您确保浏览器保持最新状态。 1. 使用官方PPA&#xff08;个人包档案&#xff09; 官方PPA提供了最新版本的F…

ubuntu22.04安装redis

更新包管理器的索引&#xff1a; sudo apt update安装Redis&#xff1a; sudo apt install redis-server确认Redis已经安装并且正在运行&#xff1a; sudo systemctl status redis-server

flutter 中 ssl 双向证书校验

SSL 证书&#xff1a; 在处理 https 请求的时候&#xff0c;通常可以使用 中间人攻击的方式 获取 https 请求以及响应参数。应为通常我们是 SSL 单向认证&#xff0c;服务器并没有验证我们的客户端的证书。为了防止这种中间人攻击的情况。我么可以通过 ssl 双向认证的方式。即…

用Python实现时间序列模型实战——Day1:时间序列的基本概念

一、学习内容 1. 时间序列数据的定义与特点 定义&#xff1a; 时间序列数据是一组按时间顺序排列的观测值。时间序列的每个观测值都与特定时间点相关联。例如&#xff0c;气温每天的记录、股票每日的收盘价等。 特点&#xff1a; 时间依赖性&#xff1a;时间序列数据的一个…

Eureka的生命周期管理:服务注册、续约与下线的完整流程解析

Eureka的生命周期管理&#xff1a;服务注册、续约与下线的完整流程解析 引言 在分布式系统中&#xff0c;服务发现是微服务架构的核心问题之一。Eureka是Netflix开源的一个服务发现框架&#xff0c;它能够有效地管理微服务的生命周期&#xff0c;包括服务注册、续约和下线。这…

8.27-dockerfile的应用+私有仓库的创建

一、dockerfile应用 通过dockerfile创建⼀个在启动容器时&#xff0c;就可以启动httpd服务的镜像 1.步骤 : 1.创建⼀个⽬录&#xff0c;⽤于存储Docker file所使⽤的⽂件2.在此⽬录中创建Docker file⽂件&#xff0c;以及镜像制作所使⽤的⽂件3.使⽤docker build创建镜像4.使…

基于x86 平台opencv的图像采集和seetaface6的图像质量评估功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的图像质量评估功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的图像质量评估模块…

全新的大语言模型Grok-2,最新测评!!

埃隆马斯克再次引发轰动&#xff0c;他旗下的xAI公司推出了全新的大语言模型Grok-2&#xff01; 最新的Grok-2测试版已经发布&#xff0c;用户可以在&#x1d54f;平台上体验小版本的Grok-2 mini。 马斯克还通过一种谜语般的方式揭开了困扰大模型社区一个多月的谜团&#xff1a…

Java笔试面试题AI答之面向对象(2)

文章目录 7. Java中的组合、聚合和关联有什么区别&#xff1f;1. 关联&#xff08;Association&#xff09;2. 聚合&#xff08;Aggregation&#xff09;3. 组合&#xff08;Composition&#xff09;总结 8. 请设计一个符合开闭原则的设计模式的例子&#xff1f;策略模式示例1.…

每日刷力扣SQL(九)

1484.按日期分组销售产品 转载 首先&#xff0c;根据题目的描述以及给出的示例。我们能得到结果集中各个字段的含义如下&#xff1a; ① sell_date&#xff1a;卖出产品的日期&#xff08;应该不用解释了&#xff09; ② num_sold&#xff1a;当前这个日期下&…

工业软件架构2:(QT和C++实现)

工业软件架构 - 事件驱动 - 2 1. 命令模式的使用命令模式(Command Pattern)命令模式的基本概念命令模式的运作机制1. 定义命令接口2. 实现具体命令3. 调用者类4.扩展命令模式的功能撤销命令:宏命令:总结2. MVVM 模式的使用View(界面)部分则通过绑定与 ViewModel 交互:3.…

FFmpeg的入门实践系列三(基础知识)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力 文章目录 前期博客一、音视频常用术语二、FFmpeg库的结构介绍三、FFmpeg的常用函数初始化封装格式编解码器相关 四、FFmpeg常用的数…

FastCGI简述

FastCGI (FCGI) 是一种协议&#xff0c;用于改善 Web 服务器和应用程序之间的通信效率。它是在 CGI&#xff08;Common Gateway Interface&#xff09;的基础上发展起来的&#xff0c;旨在解决 CGI 在处理大量并发请求时存在的性能问题。 CGI的由来 最早的Web服务器只能简单地…

WHAT - Jamstack(JavaScript, APIs, and Markup 与 Serverless 无服务器架构)

目录 一、介绍1. JavaScript2. APIs3. Markup4. Jamstack 的优势5. Jamstack 架构的工作流程 二、常见的 Jamstack 技术栈三、无服务器架构&#xff08;Serverless&#xff09;无服务器架构的核心概念1. 函数即服务&#xff08;FaaS&#xff09;2. 后端即服务&#xff08;BaaS&…

解决 JS WebSocket 心跳检测 重连

解决 JS WebSocket 心跳检测 重连 文章目录 解决 JS WebSocket 心跳检测 重连一、WebSocket 心跳检测的作用二、心跳检测的处理方案1. 创建 WebSocket 连接2. 心跳参数设置3. 心跳检测逻辑4. 心跳包响应处理5. 断线重连机制 三、总结 一、WebSocket 心跳检测的作用 WebSocket 是…

序列化组件对比

1、msgpack介绍 1.MsgPack产生的数据更小&#xff0c;从而在数据传输过程中网络压力更小 2.MsgPack兼容性差&#xff0c;必须按照顺序保存字段 3.MsgPack是二进制序列化格式&#xff0c;兼容跨语言 官网地址&#xff1a; https://msgpack.org/ 官方介绍&#xff1a;Its lik…

C++ 移动构造函数为什么设置noexcept?

答案显然是&#xff1a; 移动构造函数设置了noexcept后STL的容器可以显著提高性能。 For example: class MyClass { public:MyClass(int v) { val v; }MyClass(const MyClass& o) {val o.val;std::cout << "Copy constructor " << val << …