学python的第十四天---小蓝(5)

2023-11-07

一、最长公共子序列(dp)

在这里插入图片描述
在这里插入图片描述

Maxn = 1005
dp = [[0 for _ in range(Maxn)] for _ in range(Maxn)]
if __name__ == '__main__':
    n,m=map(int,input().split())
    a= list(map(int,input().split()))
    b= list(map(int,input().split()))
    for i in range(len(a)):
        for j in range(len(b)):
            if a[i] == b[j]:
                dp[i + 1][j + 1] = dp[i][j] + 1
            else:
                dp[i + 1][j + 1] = max(dp[i + 1][j], dp[i][j + 1])
    print(dp[n][m])

二、蓝桥骑士(最长递增子序列)

在这里插入图片描述

maxn=1005
dp=[1 for _ in range(maxn)]
n=int(input())
a=list(map(int,input().split()))
ans=1
for i in range(len(a)):
    for j in range(i):
        if a[i]>a[j]:
            dp[i]=max(dp[j]+1,dp[i])
    ans=max(ans,dp[i])
print(ans)

三、蓝肽子序列(最长公共子序列)

在这里插入图片描述

def to(u):
    ans=[]
    s=""
    for i in u:
        if "A"<=i<="Z":
            ans.append(s)
            s=i
        else:
            s+=i
    ans.append(s)
    return ans[1:]#把最一开始的那个”“删除

a=input()
b=input()
a=to(a)
b=to(b)
# print(a)
# print(b)
n,m=len(a),len(b)
dp=[[0 for i in range(m+5)]for j in range(n+5)]
for i in range(len(a)):
  for j in range(len(b)):
    if a[i]==b[j]:
      dp[i+1][j+1]=dp[i][j]+1
    else:
      dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1])
print(dp[n][m])

四、合唱队形(最长递增子序列)

在这里插入图片描述

五、字符串编辑问题

在这里插入图片描述

引入一个难一点的题目:最优包含

在这里插入图片描述
这个题目是线性 DP 中比较经典的题目。

这个类型就做编辑距离,可以通过 DFS 解决,也可以通过 DP 解决。

DP 的时间复杂度低。

我们先来讲一下,编辑距离。

编辑距离为两个字符串,a 和 b 通过多少次变换,使得 a 变成 b。

我们可以做出 3 种操作。

1、删除操作,将 a[i] 从 a 中移除
2、插入操作,在 a[i] 后加上 b[j]
3、替换操作,将 a[i] 修改为 b[j]
编辑距离的状态转移类似 LCS ,但有有很大的差别。

初始状态,i=j=0,都在字符串的开头。

然后开始判断 a[i]=?b[j]

如果相同,那么就不需要修改,所以dp[i+1][j+1]=dp[i][j]

所以在a[i-1]等于b[j-1]时,dp[i][j]这个状态由dp[i-1][j-1]转移而来。

dp[i][j]=dp[i-1][j-1]

如果不同,那就需要进行三种可能的操作

1、修改操作:

a[i] 修改为 b[j], 因为编辑了一次,所以+1

dp[i+1][j+1]=dp[i][j]+1

所以在a[i-1]不等于b[j-1]时,dp[i][j]这个状态由dp[i-1][j-1]转移而来。

dp[i][j]=dp[i-1][j-1]

2、删除操作,直接把 a[i] 删除,此时转移到 dp[i][j+1] ,因为 a[i] 被删除,但是下一个字符到了 a[i] 的位置,而对应比较的位置到了b[j+1]。

所以此时状态转移到了dp[i][j+1]

dp[i][j+1]=dp[i][j]+1

因为编辑了一次,所以+1

所以在a[i-1]不等于b[j-1]时,dp[i][j]就有可能通过dp[i-1][j]转移而来。

3、插入操作,在a[i]后添加一个b[j],那么此时a[i+1]和b[j]对应,因为加了一个字符就变成了a[i+1],而且跟b[j]对应,那么下一个状态转移到了dp[i+1][j]

dp[i+1][j]=dp[i][j]+1

此时状态转移到了 dp[i+1][j]=dp[i][j]+1

因为编辑了一次,所以+1

所以在a[i-1]不等于b[j-1]时,dp[i][j]就有可能通过dp[i][j-1]转移而来。

那么不同时,我们选择他们的最小值即可。



def init(s,t):

    dp = [[0 for i in range(len(t) + 1)] for j in range(len(s) + 1)]
    for i in range(len(s) + 1):
        dp[i][0] = 0

    for j in range(1,len(t) + 1):
        dp[0][j] = 999999

    return dp

if __name__ == '__main__':
    s = list(input())
    t = list(input())

    dp=init(s,t)

    for i in range(len(s)):
        for j in range(len(t)):
            if s[i] == t[j]:
                dp[i + 1][j + 1] = dp[i][j]
            else:
                dp[i + 1][j + 1] = min(dp[i][j] + 1, dp[i][j + 1])
                dp[i + 1][j + 1] = min( dp[i + 1][j + 1] ,dp[j+1][i]+1)

    print(dp[-1][-1])

这道题目也比较简单,由于是包含关系,并不是相等关系,所以当S多余T是,不需要进行删除操作。

所以这个题目不考虑删除的那个状态转移即可。

def init(s,t):

    dp = [[0 for i in range(len(t) + 1)] for j in range(len(s) + 1)]
    for i in range(len(s) + 1):
        dp[i][0] = 0

    for j in range(1,len(t) + 1):
        dp[0][j] = 999999

    return dp

if __name__ == '__main__':
    s = list(input())
    t = list(input())

    dp=init(s,t)

    for i in range(len(s)):
        for j in range(len(t)):
            if s[i] == t[j]:
                dp[i + 1][j + 1] = dp[i][j]
            else:
                dp[i + 1][j + 1] = min(dp[i][j] + 1, dp[i][j + 1])

    print(dp[-1][-1])

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

学python的第十四天---小蓝(5) 的相关文章

  • python中热图的层次聚类

    我有一个 NxM 矩阵 其值范围为 0 到 20 我可以使用 Matplotlib 和 pcolor 轻松获得热图 现在我想使用 scipy 应用层次聚类和树状图 我想重新排序每个维度 行和列 以显示哪些元素相似 根据聚类结果 如果矩阵是方
  • Pip install 导致此错误“ cl.exe' failed with exit code 2 ”

    我已经阅读了有关此错误的所有其他问题 但令人沮丧的是 没有一个给出有效的解决方案 如果我跑pip install sentencepiece在命令行中 它给出了以下输出 src sentencepiece sentencepiece wra
  • 引发 RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 导入 fitz 时目录 'static/' 不存在

    当我运行 extract img py 文件时出现此错误 RuntimeError f 目录 directory 不存在 运行时错误 导入 fitz 时不存在目录 static 我不明白为什么这会给我发回此错误消息 我之前看到过关于这个话题
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • 将 matplotlib png 转换为 base64 以在 html 模板中查看

    背景 你好 我正在尝试制作一个简单的网络应用程序 按照教程计算阻尼振动方程 并将结果的 png 返回到 html 页面 然后将其转换为 Base64 字符串 Problem 该应用程序运行正常 只是在计算结果时返回损坏的图像图标 可能是因为
  • 在函数调用之间保存数据的Pythonic方式是什么?

    对我来说 上下文是我需要在调用修改该值的函数之间保留的单个 int 的信息 我可以使用全局 但我知道这是不鼓励的 现在 我使用了包含 int 的列表形式的默认参数 并利用了可变性 以便在调用之间保留对值的更改 如下所示 def increm
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • 如何在 Python 中执行相当于预处理器指令的操作?

    有没有办法在 Python 中执行以下预处理器指令 if DEBUG lt do some code gt else lt do some other code gt endif There s debug 这是编译器预处理的特殊值 if
  • 向量化 numpy bincount

    我有一个 2d numpy 数组 A我要申请np bincount 到矩阵的每一列A生成另一个二维数组B由原始矩阵每列的 bincounts 组成A 我的问题是 np bincount 是一个采用一维数组的函数 它不是像这样的数组方法B A
  • 网页抓取 - 如何识别网页上的主要内容

    给定一个新闻文章网页 来自任何主要新闻来源 例如时报或彭博社 我想识别该页面上的主要文章内容 并丢弃其他杂项元素 例如广告 菜单 侧边栏 用户评论 在大多数主要新闻网站上都可以使用的通用方法是什么 有哪些好的数据挖掘工具或库 最好是基于Py
  • 从 Python 中编译的正则表达式中提取命名组正则表达式模式

    我有一个 Python 正则表达式 其中包含多个命名组 但是 如果先前的组已匹配 则可能会错过与一组匹配的模式 因为似乎不允许重叠 举个例子 import re myText sgasgAAAaoasgosaegnsBBBausgisego
  • 在 scrapy 中将基本 url 与结果 href 结合起来

    下面是我的蜘蛛代码 class Blurb2Spider BaseSpider name blurb2 allowed domains www domain com def start requests self yield self ma
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns
  • Selenium Python 使用代理运行浏览器[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个非常简单的脚本 该脚本从 txt 文件获取代理 不需要身份验证 并用它打开浏览器 然后沿着代理列表循环此操作一定次数 我确实知道如何打开 txt 文件并使用它 我的主要问题是让代理正常工作 我见

随机推荐

  • 开源库网格算法比较

    对于Mesh 我们通常分为结构化网格和非结构化网格 理解很简单 除了四边形和六面体是结构化网格 其它都是非结构化网格 最近在学习网格算法 本人关心的主要是3D网格相关的算法 总结了一下主要包括 网格生成 网格平滑 网格参数化 网格重新剖分
  • 3/1 线性存储之链表应用和练习题

    链表的应用及练习题 1 合并两一元多次项式 2 灵活使用链表的查找任意节点数据 本文将持续更新 1 合并两一元多次项式 举例说明 A x 5x2 x3 6x4 7x5 B x 7x 2x2 3x3 2x4 6x5 可以形成如图所示的两个链表
  • 运营之光2.0 我的互联网运营方法论与自白

    唯有爱与用户不可辜负 与每一位互联网人共勉 运营是什么 产品负责界定和提供长期用户价值 运营负责创造短期用户价值 协助产品完善长期价值 若干运营模块 内容运营 提升内容相关的数据 如内容数量 内容浏览量 内容互动数 内容传播数 用户运营 提
  • 最新版Android SDK Manager.exe 无法打开、配置代理等

    背景 升级 Android SDK tools 到版本26后就打不开Android SDK SDK Manager exe工具了 甚至会找不到Avd Manager exe和Sdk Manager exe这两个文件 这是因为谷歌把他们移除了
  • Excel如何将多分隔符的杂乱信息数据拆分

    1 如下图 是某老师要处理多分隔符号的杂乱数据 现在想要将数据中的姓名 性别 年龄分别拆分放在三个单元格中 2 选中B列所有要处理的数据区域 3 点击下图选项 Excel插件 具体安装方法百度即可 本文不作过多叙述 4 点击 更多 5 选择
  • vue项目中,main.js,App.vue,index.html如何调用

    1 main js是我们的入口文件 主要作用是初始化vue实例 并引入所需要的插件 2 App vue是我们的主组件 所有页面都是在App vue下进行切换的 其实你也可以理解为所有的路由也是App vue的子组件 所以我将router标示
  • cgo+gSoap+onvif学习总结:9、go和c进行socket通信进行onvif协议处理

    cgo gSoap onvif学习总结 9 go和c进行socket通信进行onvif协议处理 文章目录 cgo gSoap onvif学习总结 9 go和c进行socket通信进行onvif协议处理 1 前言 2 思路 3 c代码 3 1
  • 一步一步实现现代前端单元测试

    2年前写过一篇文章用Karma和QUnit做前端自动单元测试 只是大概讲解了 karma 如何使用 针对的测试情况是传统的页面模式 本文中题目中 现代 两字表明了这篇文章对比之前的最大不同 最近几年随着SPA Single Page App
  • 在web项目中如何导入jar包

    在Eclipse里 右键点击工程 gt build Path gt Configure Build Path gt Libraries gt Add JARs或者Add External JARs 如果是war包 把jar包扔到WEB IN
  • angular api请求简单封装get(),post()

    api请求简单封装 api 简单封装 scope api get function params callback http url params api url default url method GET params params s
  • 错误:No rule to make target `../pubbusiness/localshareapi/localsharerecv.cpp,need by ‘temp/localshare

    出现这个错误的原因 排查方向往出现错误的那个文件 可能有比如引用此文件的路径不对 工程更改路径或者更改了其中的文件夹名称等 解决方案 1 查看 pro或 pri文件里路径的 h或 cpp的加载路径有没有错 我的是因为这个原因 2 删除之前编
  • Jauns-gateway 报错【No package ‘libssl‘ found No package ‘libcrypto‘ found】

    No package libssl found No package libcrypto found 在Mac下配置janus gateway服务器的时候遇到了找不到libssl和libcrypto错误 详情如下 configure che
  • Java接口:实现多重继承,促进代码复用与扩展的强大工具

    目录 1 接口的定义与成员 2 接口的实现 3 接口的多继承与多态 3 1实现多重继承 3 2促进代码复用与扩展 4 Java新特性 默认方法 静态方法与私有方法 5 结语 1 接口的定义与成员 Java中使用interface关键字定义接
  • 即时通讯IM技术领域基础篇

    转自 https juejin im post 5a694f216fb9a01cb74e8f74 即时通讯IM技术领域基础篇 即时通讯IM技术领域提高篇 议题 准备工作 协议选型 网络传输协议选择 和 数据通信协议选择 xxx项目架构 架构
  • 重学java—基础知识点

    数据类型 1 基本数据类型 boolean 1 byte 8 char 16 short 16 int 32 float 32 long 64 double 64 每个类型都有它对应的包装类 自动装箱和拆箱操作 2 缓存池 valueOf
  • Rem与Px的转换

    rem是CSS3中新增加的一个单位值 他和em单位一样 都是一个相对单位 不同的是em是相对于元素的父元素的font size进行计算 rem是相对于根元素html的font size进行计算 这样一来rem就绕开了复杂的层级关系 实现了类
  • xshell7和xftp7下载和安装

    xshell7和xftp7下载和安装 环境 win10 链接 https pan baidu com s 1i6Zl2eW8tJJ83YAc02oQjg 提取码 6666 复制这段内容后打开百度网盘手机App 操作更方便哦 2022年06月
  • pandas 读/写取多个sheet 的excel

    经常使用pandas 读取多个sheet 的文件 读取方式 先获得sheet 名字 再指定sheet name 参数进行读取 写多个sheet 到同一个文件 import pandas as pd infile data test xlsx
  • FileReader与FileWriter

    FileReader与FileWriter分别继承Reader和Writer 以字符为单位广泛用于文件操作的节点流 FileReader类用于从文本文件读数据 每次读入一个字符或者一个字符数组 FileWriter类用于从文本文件写数据 每
  • 学python的第十四天---小蓝(5)

    一 最长公共子序列 dp 二 蓝桥骑士 最长递增子序列 三 蓝肽子序列 最长公共子序列 四 合唱队形 最长递增子序列 五 字符串编辑问题 引入一个难一点的题目 最优包含 一 最长公共子序列 dp Maxn 1005 dp 0 for in