线性DP相关例题

2023-11-01

目录

1.最长公共子序列

2.最长递增子序列(蓝桥骑士) 

3.字符串转换 

 4.装箱问题(0/1背包简化版)

 5.过河卒


1.最长公共子序列

题目描述

给定一个长度为 N 数组 a 和一个长度为 M 的数组 b

请你求出它们的最长公共子序列长度为多少。

最长公共子序列(Longest Common Subsequence,LCS):一个给定序列的子序列,是在该序列中删去若干元素后得到的序列。例如:X = {A, B, C, B, D, A, B},它的子序列有{A, B, C, B, A}、{A, B, D}、{B, C, D, B}等。子序列和子串是不同的概念,子串的元素在原序列中是连续的。

给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。最长公共子序列是长度最长的子序列。

输入描述

输入第一行包含两个整数 N,M,分别表示数组 a 和 b 的长度。

第二行包含 N 个整数a1​,a2​,...,an​。

第三行包含 M 个整数 b1​,b2​,...,bn​。

1≤N,M≤103,1≤ai​,bi​≤10^9。

输出描述

输出一行整数表示答案。

样例输入

5 6
1 2 3 4 5
2 3 2 1 4 5

样例输出

4 
  1. 当 ai​=bj​ 时,已求得 A_{i-1}​ 和 B_{j-1}的最长公共子序列,在其尾部加上ai​ 或bj​ 即可得到 Ai​ 和 Bj​ 的最长公共子序列。状态转移方程是:dp[i][j] = dp[i-1][j-1] + 1。
  2. 当 ai ​!=bj​ 时,求解两个子问题:A_{i-1}​ 和 B_j的最长公共子序列;Ai​ 和 B_{j-1}​ 的最长公共子序列。取其中的最大值,状态转移方程是:dp[i][j]=max(dp[i][j−1],dp[i−1][j])。
n,m=map(int,input().split())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
dp=[[0 for i in range(1050)]for j in range(1050)]
for i in range(1,n+1):
     for j in range(1,m+1):
          if a[i-1]==b[j-1]:
               dp[i][j]=dp[i-1][j-1]+1
          else:
               dp[i][j]=max(dp[i-1][j],dp[i][j-1])
print(dp[n][m])

2.最长递增子序列(蓝桥骑士) 

题目描述

小明是蓝桥王国的骑士,他喜欢不断突破自我。

这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为a1​,a2​,...,an​,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。

身为高傲的骑士,小明从不走回头路,且只愿意挑战战力值越来越高的对手。

请你算算小明最多会挑战多少名对手。

输入描述

输入第一行包含一个整数 N,表示对手的个数。

第二行包含 N 个整数a1​,a2​,...,an​,分别表示对手的战力值。

1≤N≤3×105,1≤ai​≤10^9。

输出描述

输出仅一行包含一个整数表示答案。

样例输入

6
1 4 2 2 5 6

样例输出

4
N=10005
n=int(input())
dp=[0 for i in range(N)]
a=list(map(int,input().split()))
ans=0
dp[0]=1
for i in range(1,n):
     maxn=0
     for j in range(i):
          if dp[j]>maxn and a[j]<a[i]:
               maxn=dp[j]
     dp[i]=maxn+1
     ans=max(ans,dp[i])
print(ans)
          

3.字符串转换 

题目描述

小蓝拥有两个字符串 S,T​。他希望通过如下操作使得字符 S 转换为字符串 T。

操作有一下三种:

  1. 删除一个字符。
  2. 插入一个字符。
  3. 将一个字符改为另一个字符。

问最少需要操作多少次才可以使得字符串 S 转换为字符串 T。

输入描述

输入第一行包含一个字符串 S。

输入第二行包含一个字符串 T。

1≤∣S∣,∣T∣≤2×10^3,保证 S、T 只包含小写字母。

输出描述

输出一个整数表示答案。

输入输出样例

示例 1

输入

abc
aa

输出

2
a=input()
b=input()
dp=[[0 for i in range(2005)]for j in range(2005)]
m=len(a)
n=len(b)
for i in range(1,m+1):
     for j in range(1,n+1):
          if a[i-1]==b[j-1]:
               dp[i][j]=dp[i-1][j-1]
          else:
               dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
print(dp[m][n])
     

 4.装箱问题(0/1背包简化版)

题目描述

有一个箱子容量为 V​(正整数0≤V≤20000),同时有n 个物品(0≤n≤30),每个物品有一个体积(正整数)。

要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入描述

输入第一行,一个整数,表示箱子容量。

第二行,一个整数 n,表示有 n 个物品。

接下来n 行,分别表示这 n 个物品的各自体积。

输出描述

输出一行,表示箱子剩余空间。

样例输入

24
6
8
3
12
7
9
7

样例输出

0 
n=int(input())
m=int(input())
w=[]
for i in range(m):
     w.append(int(input()))
dp=[0 for i in range(20005)]
for i in range(m):
     for j in range(n,w[i]-1,-1):
          dp[j]=max(dp[j],dp[j-w[i]]+w[i])
print(n-dp[n])

 5.过河卒

题目描述

如图,A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。

例如上图 CC 点上的马可以控制 9 个点(图中的 1​,P2​,⋯P8​ 和 CC)。卒不能通过对方马的控制点。

棋盘用坐标表示,A 点(0,0)、B 点(n,m)(n,m \leq 20),同样马的位置坐标是需要给出的。

现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。。

输入描述

一行四个正整数,分别表示 B 点坐标和马的坐标。

输出描述

一个整数,表示所有的路径条数。

输入输出样例

示例 1

输入

6 6 3 3

输出

6
n,m,a,b=map(int,input().split())
dir=[(1,2),(-1,2),(-1,-2),(1,-2),(2,1),(2,-1),(-2,1),(-2,-1)]
vis=[]
s=[(a,b)]
for i in range(8):
     x=a+dir[i][0]
     y=b+dir[i][1]
     if x>0 and y>0:
          s.append((x,y))
dp=[[0 for i in range(25)]for j in range(25)]
dp[0][0]=1
for i in range(n+1):
     for j in range(m+1):
          if (i,j) not in s:
              if i==0:
                   dp[i][j]=1
              if j==0:
                   dp[i][j]=1
              if i>0 and j>0:
                   dp[i][j]=dp[i-1][j]+dp[i][j-1]
print(dp[n][m])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性DP相关例题 的相关文章

  • 使用 Python 编辑 RTF 文件

    也许这是一个愚蠢的问题 但我不明白 所以道歉 我有一个 RTF 文档 我想更改它 例如 有一个表 我想复制一行并以面向对象的方式更改代码中第二行中的文本 我认为 pyparsing 应该是可行的方法 但我摆弄了几个小时但没有明白 我没有提供
  • Python 和 Numpy 是 nan 和 set

    我在使用 Python 的 Numpy set 和 NaN 非数字 时遇到了不可预测的行为 gt gt gt set np float64 nan np float64 nan set nan nan gt gt gt set np flo
  • 使用 pandas.date_range() 生成多个日期时间,每周两个日期

    我在用着pd date range start date end date freq W MON 每周一生成每周频率日期时间start date 2017 01 01 and end date 2017 12 31 这意味着每月大约生成 4
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 在Python中读取tiff标签

    我正在尝试用 Python 读取 tiff 文件的标签 该文件是 RGB 的uint16每个通道的值 我目前正在使用tifffile import tifffile img tifffile imread file tif 然而 img是一
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • App Engine 实体到字典

    将 google app engine 实体 在 python 中 复制到字典对象的好方法是什么 我正在使用 db Expando 对象 所有属性均为扩展属性 Thanks 有一个名为foo尝试 foo dict
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • 考研数学自整理,弥补知识漏洞(强化、冲刺)

    本次分享的是博主在考研时整理的最后一份数学知识 也是上考场前对知识最后的强化 因为博主是二战上岸 第一年考数三 第二年考数一 虽然这份笔记总结的内容不多 但这里浓缩了2020前历年数三 数的一真题与模拟题易错的考点和难点 链接 https
  • Java 正则表达式匹配规则

    表示捕获分组 会把每个分组里的匹配的值保存起来 使用 n n是一个数字 表示第n个捕获组的内容 表示非捕获分组 和捕获分组唯一的区别在于 非捕获分组匹配的值不会保存起来 0次或者多次 匹配前面的子表式零次或多次 1次或者多次 匹配前面的子表
  • 给一非空的单词列表,返回前 k 个出现次数最多的单词。旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。 现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

    Arrays sort是针对数组排顺序 也可以通过第二个参数指定比较规则 Collection sort是针对集合类排序 给一非空的单词列表 返回前 k 个出现次数最多的单词 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现
  • [蓝帽杯 2022 初赛]之Misc篇(NSSCTF)刷题记录(复现)

    NSSCTF Misc篇 蓝帽杯 2022 初赛 domainhacker 蓝帽杯 2022 初赛 domainhacker1 蓝帽杯 2022 初赛 domainhacker2 计算机取证 蓝帽杯 2022 初赛 计算机取证 1 蓝帽杯
  • Centos卸载gcc

    1 查看安装的gcc版本 y localhost Desktop rpm q gcc gcc 4 4 7 23 el6 x86 64 2 执行卸载命令 rpm e y localhost Desktop rpm e gcc 4 4 7 23
  • Algorithm Accumulation

    目标检测 DPM HOG SIFT 最优匹配 DTW HMM 优化入门 爬山算法 退火算法 遗传算法 多目标优化 ILP 复杂度 NP完全问题 这篇博客就用来积累学过的一些比较好的算法 现开始觉得算法真是一个宝啊 目标检测 DPM 参考博客
  • Oracle中5中分区介绍

    一 范围分区 就是根据数据库表中某一字段的值的范围来划分分区 例如 Sql代码 create table graderecord sno varchar2 10 sname varchar2 20 dormitory varchar2 3
  • Srpingboot注解:@ConditionalOnProperty的用法

    在之前我就一直有一个想法 就是有的bean我不想注入 比如说有的时候用的是A的bean 可能换了一个不同的系统可能要用B的bean 我可不可以自己去配置什么时候注入A什么时候注入B 而不是我都注入 用到那个用哪个 实际 Conditiona
  • Tomcat

    一 Web资源的分类 Web资源分为两类 静态资源和动态资源 静态资源 html css js mp4视频 jpg图片 txt等 动态资源 jsp页面 servlet程序等 二 常用的web服务器 Web服务器 也可以叫javaweb容器
  • 驱动开发 day4 9/13

    head h ifndef HEAD H define HEAD H typedef struct unsigned int MODER unsigned int OTYPER unsigned int OSPEEDR unsigned i
  • JAVA中类的public class与class的区别详解

    1 类的访问权限 为了控制某个类的访问权限 修饰词必须出现在关键字class之前 例如 public class Student 在编写类的时候可以使用两种方式定义类 A public class定义类 B class定义类 2 publi
  • 2021-11-3 内核态和核心态

    1 什么是内核态 当一个进程进行系统调用而陷入内核代码中时 就称程序陷入了内核态 否则就是用户态 用户程序运行在用户态而操作系统运行在内核态 用户态只能执行非特权指令 而内核态可以执行全部指令 内核态可以执行的指令比如 执行I O 设置时钟
  • 拓数派荣获 “2023 年杭州市企业高新技术研究开发中心” 认定

    近日 拓数派上榜由杭州市科学技术局公布的 2023 年杭州市企业高新技术研究开发中心名单 通过专业的技术研发 成果转化和高新技术产业化成绩 获得 杭州市拓数派数据计算企业高新技术研究开发中心 认定 图为 杭州市拓数派数据计算企业高新技术研究
  • Lattice库联合ModelSim仿真FIFO

    Lattice联合ModelSim仿真FIFO 前言 一 添加IP 二 库文件添加 一 方式一 添加器件库到ModelSim 二 方法二 直接添加器件库到Libray 和tb v在同一个目录下仿真 三 仿真 一 仿真文件 二 仿真结果 前言
  • 计算机进制存在的意义

    发布本文的实际想法 是否想过为什么要有进制的存在 如二进制 十进制等 存在即合理 通过思考 得出以下结论 希望能在计算机基础方面给你带来一定的帮助 进制的意义 二进制是计算机看得懂的语言 我们在电脑上所写的一切东西 都需要转成二进制让电脑执
  • ctfshow web4

    提示日志注入 文件包含 还有一个get方式的参数url 有nginx 那就试试它的默认日志目录 日志默认路径 1 apache Linux 日志默认路径 etc httpd logs access log var log httpd acc
  • Window下编译PJSIP,不编译Media模块

    Windows系统下使用VS2017进行编译PJSIP 下载地址 PJSIP的地址 https github com pjsip pjproject 在线clone太慢的话 可以直接在这里下载比clone会快很多 https github
  • 用数组实现邻接表

    用数组实现邻接表 转载自 http blog csdn net wang2534499 article details 47750321 坐在马桶上看算法 算法8 巧妙的邻接表 数组实现 之前我们介绍过图的邻接矩阵存储法 它的空间和时间复杂
  • Android APP专项测试之ADB命令

    Android环境准备 Android APP专项测试需要使用adb命令 需要安装Android SDK参考 验证adb 数据线连接Android设备 或虚拟机 或使用无线连接参考 Android设备进入开发者模式 打开USB调试 USB安
  • 线性DP相关例题

    目录 1 最长公共子序列 2 最长递增子序列 蓝桥骑士 3 字符串转换 4 装箱问题 0 1背包简化版 5 过河卒 1 最长公共子序列 题目描述 给定一个长度为 N 数组 a 和一个长度为 M 的数组 b 请你求出它们的最长公共子序列长度为