算法--动态规划(线性DP、区间DP)

这里写目录标题

  • tip
    • 数组下标从0开始还是从1开始
  • 数学三角形
    • 介绍
    • 算法思想
    • 例题+代码
  • 最长上升子序列
    • 介绍
    • 算法思想
    • 例题+代码

tip

数组下标从0开始还是从1开始

在这里插入图片描述
如果代码中涉及到数组下标为i-1(有时候哪怕不是同一个数组也符合情况,因为是针对同一组数据进行的多个数组设置),那么我们可以使 i 从 1开始,这样,当 i = 1 时,就取到了[0],如果这个位置有特殊情况,那么这样一来我们也不必使用 if ,直接对 f [0]设置一个特殊值即可

注意,“输入”与“使用”是统一的,即如果输入数组时决定了使用 i 从 1 开始,那么到时候使用或者取元素时,一定要记得是从 1 开始,
如果输入决定了是从0开始,那么到时候取元素的时候,记得从0开始

数学三角形

介绍

在这里插入图片描述
从顶部出发,可以向左下或者右下移动,最后形成一条路径,找到一条路径使得路径上的数字之和最大

算法思想

在这里插入图片描述
首先我们对三角形的各个数进行编码,从上到下每行从1开始表上行号,之后,东北方向偏45度进行列号的编排,最左边是1列,之后往右依次是2,3,…,这样一来,我们就可以标定某个元素的位置,这也符合三角形位置的数据在数组内存储时的位置

对于动态规划,仍然是状态表示和状态计算,
状态表示:因为每个元素由一个二维数对进行位置表示,所以,状态表示仍然是一个二维的,如上图所示,属性是max
状态计算:由前面的经验可以总结出:状态计算是一个情况的划分,划分的是上一层的情况,即仅研究上一层即可,之后递推原理会帮助代码完成
上一层的状态有两个,一个来自左上,一个来自右上。
两种划分都是曲线救国的思路,即 f [ i - 1 , j - 1 ] + a[ i , j ],另一个是 f [ i - 1 , j ] + a[ i , j ]
其中 a数组存储了所有的数据,a [ i , j ]就是表示[ i , j ]位置的值

例题+代码

在这里插入图片描述
在这里插入图片描述
首先,a[N][N]数组是用来存储所有的数据的
f[N][N]是状态表示

之后,main函数里
首先读入n
之后由于这组数据会涉及到 i-1 ,所以使用数组存数据时,i从1开始到小于等于n,j从1开始到小于等于 i (因为是三角形),读入到a[][]数组中,给[0][x] [x][0]这些位置空出来,方便一些特殊情况时拿来使用(包括a数组自己使用或者其他数组使用,总之这个位置要留出来)
之后初始化状态表示,因为状态表示数组涉及到某一点的上边两个角,所以,要处理好边界问题,我们的 i 从 0开始到等于n,j 从 0开始到等于 i + 1 (这样做可以在原来的数据基础上,多加一个0行和0列被初始化,这样的话,当我们遇到如下图所示情况时,就不会出错了),且f[i][j] = - INF,将所有的位置初始化为负无穷,这样的话,最终原数据的外面的位置下标,f[][]的值是负无穷,这样做是为了当我们有路径来到了原数据的外面,那最后的值一定是负无穷,这样我们就可以筛选出来哪些路径是经过了原数据的外面的位置得到的,这些数据可以排除
之后初始化f[1][1] = a[1][1],因为第一个还没有经过任何其他的点,可以初始化为1
之后for循环,i 从 2 开始到等于n(之所以从2开始,是因为1就一个节点,已经被初始化了)
二层循环 ,j 从 1 开始到等于i (仍然是因为输入时是三角形输入)
f[ i ][ j ] = max(f[ i - 1 ][j - 1] + a[ i ][ j ] , f[ i - 1 ][ j ] + a[ i ][ j ])
到此为止,我们就已经可以拿到所有 i j 点的状态了,我们由于是想求最大路径,所以对叶子结点的状态进行求max即可,这里由于之前所有的f都被初始化为了负无穷,所以这样答案也初始化为负无穷去进行比较,而就算有路径经过了负无穷,那最后的值是-INF+一些正数,肯定比-INF要大一点点,所以,res用-INF存储,最后参与到max中
在这里插入图片描述

最长上升子序列

介绍

在这里插入图片描述
在这里插入图片描述
例如这样一个序列,最长子序列就是 1 2 5 6,长度最长是4

算法思想

在这里插入图片描述
状态表示可以使用一维的,即所有以“第” i 个数结尾的上升子序列,属性是max
状态计算:
划分依据:上一层是第几个数
如果上一层没有数,那么说明只有“第i个数”这一个数
如果上一层的数是第 j 个数,那么可以递推为 f [ j ] + 1(这个j是有条件的,要满足aj < ai)
最后对所有的f[ j ] + 1 (j从0开始到 i - 1)取max就是答案
在这里插入图片描述

例题+代码

在这里插入图片描述
在这里插入图片描述
a数组表示将数据进行存储,f数组表示状态表示
在mian函数中
首先输入n
i 从 1 到等于n ,输入a[ i ]
之后对for从1到等于n
f[ i ] = 1 ,(所有的 f 最少是1,所以先初始化为1)
之后,对于for循环,j 从 1 开始到小于 i (因为状态计算时,是以" "前一个数"是第几个数 " 进行划分的,所以j从1到小于i,表示遍历所有划分的情况)
同时判断 if (a[j] < a[i])才是合法的(因为是上升子序列,要求单调)
之后 f[i] = max(f[i] , f[j]+1)(对所有的划分进行max)
在这里插入图片描述

最后,把所有的 f[i] 进行取max,即,将所有的情况取最大值,就是最大子序列

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Flink CDC(一)】实现mysql整表与增量读取

文章目录 一. 运行前准备1. 依赖1.1. Maven dependency1.2. SQL Client JAR&#xff08;推荐&#xff09; 2. 配置 MySQL 服务器&#xff08;必须&#xff09; 二. 功能说明1. 启动模式2. 全量阶段支持 checkpoint3. 关于无主键表Exactly-Once 处理 三. 实战1. 实现mysql整表与…

C#,动态规划(DP)N皇后问题(N Queen Problem)的回溯(Backtracking)算法与源代码

1 N皇后问题&#xff08;N Queen Problem&#xff09; 在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。 2 回溯算法 回溯算法实际上一个类似枚…

程序员如何写创建一份高质量的README.md 文件?

一个系统或者产品要想吸引人&#xff0c;关键是什么&#xff1f;这一切都要从最重要的自述文件开始。自述文件是项目的首页——它通常是你给用户和贡献者留下的第一印象。 一份优秀的自述文件应该让用户了解项目的内容、使用的语言、条款和条件、您的项目可以做什么、显示正在…

FMM 笔记:在colab上执行FMM

windows上配置FMM很麻烦&#xff0c;一直没整好&#xff0c;于是尝试了在colab上执行FMM 参考内容&#xff1a;jalal1/fmm_jupyter: Install Fast map matching (FMM) using Jupyter Notebook (github.com) 1 下载数据 # download file from GitHub ! wget https://raw.gith…

Parquet 文件生成和读取

文章目录 一、什么是 Parquet二、实现 Java 读写 Parquet 的流程方式一&#xff1a;遇到的坑&#xff1a;坑1&#xff1a;ClassNotFoundException: com.fasterxml.jackson.annotation.JsonMerge坑2&#xff1a;No FileSystem for scheme "file"坑3&#xff1a;与 spa…

LeetCode 刷题 [C++] 第142题.环形链表 II

题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内…

安全防御综合实验

需求&#xff1a; 1、办公区设备可以通过电信链路和移动链路上网&#xff08;多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换&#xff09; 2、分公司设备可以通过总公司的移动链路和电信链路访问DMZ区的http服务器 3、分公司内部的客户端可以通过公网地址访问到…

大数据集群管理软件 CDH、Ambari、DataSophon 对比

文章目录 引言工具介绍CDHAmbariDataSophon 对比分析 引言 大数据集群管理方式分为手工方式和工具方式&#xff0c;手工方式一般指的是手动维护平台各个组件&#xff0c;工具方式是靠大数据集群管理软件对集群进行管理维护。本文针对于常见的方法和工具进行比较&#xff0c;帮助…

如何使用FTP上传文件

近期这边浏览论坛留言发现一位用户反馈要上传的文件过大时如何上传&#xff0c;这边就拿在Hostease 购买的一台Linux虚拟主机为例进行操做&#xff0c;因此该主机上面可以创建FTP账户并提供默认的FTP账户&#xff0c;因此使用起来很方便。 如果遇到要上传的文件过大时&#xf…

SpringMVC 学习(九)之拦截器

目录 1 拦截器介绍 2 创建一个拦截器类 3 配置拦截器 1 拦截器介绍 在 SpringMVC 中&#xff0c;拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能&#xff1a; 权限验证&#xff1a;在请求处理之前…

python Matplotlib Tkinter-->导出pdf报表

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…

未来新质生产力Agent的起源与应用

Agent是什么&#xff1f; AI Agent的发展经历了从哲学思想启蒙到计算机科学助力、专家系统兴起、机器学习崛起、深度学习突破等多个阶段。如今&#xff0c;AI Agent已经成为人工智能领域的重要组成部分&#xff0c;为人类带来了巨大的便利和发展机遇。早在古希腊时期&#xff0…

消息中间件篇之Kafka-高性能设计

一、高性能设计 消息分区&#xff1a;不受单台服务器的限制&#xff0c;可以不受限的处理更多的数据。 顺序读写&#xff1a;磁盘顺序读写&#xff0c;提升读写效率。 页缓存&#xff1a;把磁盘中的数据缓存到内存中&#xff0c;把对磁盘的访问变为对内存的访问。 零拷贝&a…

MYSQL以特殊符号分割的字符串,一行查询结果变多行查询结果

1. 字符串 ‘1,2,3’ 一行变多行 1 2 3,需要使用mysql.help_topic SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(1,2,3, ,, help_topic_id 1), ,, -1) AS numFROM mysql.help_topicWHERE help_topic_id < LENGTH(1,2,3) - LENGTH(REPLACE(1,2,3, ,, )) 12.# 字符串 ‘1,2,3’…

IDEA下新建SpringBoot项目详细步骤

在IDEA下使用Spring Initializer&#xff1a; 一、新建项目&#xff0c;利用阿里云网址https://start.aliyun.com/下载项目&#xff0c;来到Spring Initializer模块&#xff1a; 我的jdk是8&#xff0c;构建Maven类型的项目&#xff0c;Java版本选8&#xff0c;Group为公司名。…

[linux]进程信号(信号的概念,信号的产生方式,信号的相关接口、指令,函数,信号怎么保存(原理),信号怎么处理)

目录 一、信号的概念 二、信号的产生方式 通过键盘发送信号 通过系统调用&#xff0c;指令 异常 软件条件 三、信号怎么保存&#xff08;原理&#xff09; 信号其他相关常见概念 在内核中表示 sigset_t 四、信号的相关接口、指令&#xff0c;函数 signal sigpro…

如何开发自己的npm包并上传到npm官网可以下载

目录 搭建文件结构 开始编写 发布到npm 如何下载我们发布的npm包 搭建文件结构 先创建新文件夹,按照下面的样子布局 .├── README.md //说明文档 ├── index.js //主入口 ├── lib //功能文件 └── tests //测试用例 然后再此根目录下初始化package包 npm init…

消息中间件篇之Kafka-消费顺序性

一、应用场景 1. 即时消息中的单对单聊天和群聊&#xff0c;保证发送方消息发送顺序与接收方的顺序一致。 2. 充值转账两个渠道在同一个时间进行余额变更&#xff0c;短信通知必须要有顺序。 二、解决方案 topic分区中消息只能由消费者组中的唯一一个消费者处理&#xff0c;所…

登录页设计新选择:毛玻璃和新拟态风格,非2.5D和插画风

登录页给潜在用户传递了产品的品牌调性&#xff0c;是非常重要的一类页面&#xff0c;之前2.5D和插画风格的登录页流行一时&#xff0c;不过这阵风好像过去了&#xff0c;新的风格开始涌现了。 一、越来越流行的毛玻璃设计风格 毛玻璃风格是指将背景模糊处理&#xff0c;使得…

MySQL进阶篇2-索引的创建和使用以及SQL的性能优化

索引 mkdir mysql tar -xvf mysqlxxxxx.tar -c myql cd mysql rpm -ivh .....rpm yum install openssl-devel ​ systemctl start mysqld ​ gerp temporary password /var/log/mysqld.log ​ mysql -u root -p mysql> show variables like validate_password.% set glob…