2024/3/7打卡公共子序列---动态规划问题

题目:

给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。

输入格式

第一行包含两个整数 N 和 M。

第二行包含一个长度为 N 的字符串,表示字符串 A。

第三行包含一个长度为 M 的字符串,表示字符串 B。

字符串均由小写字母构成。

输出格式

输出一个整数,表示最大长度。

数据范围

1≤N,M≤1000

输入样例:

4 5
acbd
abedc

输出样例:

3

 

DP分析:

状态表示:使用 f[i][j]

  • 集合 :f[i][j] 表示A的 [1-i] 和B的 [1-j] 的所有公共子序列的方案
  • 属性:取所有公共子序列长度最大值

状态计算:

        要保证不重不漏。

 

  • 如果 A[i] == B[j],即 11  :f[i][j] = f[i-1][j-1]+1
  • 如果 A[i] \ != B[j] ,那么就从0110中选最大:f[i][j] = max(f[i-1][j], f[i][j-1]) 

        有一个问题就是f[i-1][j] 表示的是从 A的 [1-i] 和 B 的 [1-j] 中选,但是其实 B[j] 在其中不是一定会被选上的,是可选可不选的。但是我们要求的是不要 A[i] ,而必选 B[j] 的那一部分集合方案。因此 f[i-1][j] 与我们的需要的条件不完全相等。

        但仍然可以是用f[i-1][j] 来表示 01条件,这是因为条件是包含在 f[i-1][j] 中的,即条件的情况是 f[i-1][j] 的子集,而求的是max,所以对结果不影响。主要是不含 B[j] 的那一部分可以用 f[i-1][j-1] 来表示,f[i-1][j] 包含了 f[i-1][j-1] ,所以我们都不用考虑 00 这部分,因为已经包含在 f[i-1][j] 和 f[i][j-1] 中了。

        即 f[i-1][j] 是 00 和 01 的并集。

代码:

import java.io.*;
import java.util.*;class Main{static int N = 1010;static int n,m;static char[] a = new char[N];static char[] b = new char[N];static int[][] f = new int[N][N]; public static void main(String[] args) throws IOException{BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String[] s = in.readLine().split(" ");n = Integer.parseInt(s[0]);m = Integer.parseInt(s[1]);String s1 = in.readLine();String s2 = in.readLine();for(int i=1;i<=n;i++)a[i] = s1.charAt(i-1);for(int i=1;i<=m;i++)b[i] = s2.charAt(i-1);// DPfor(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i]==b[j]) f[i][j] = f[i-1][j-1]+1;else{f[i][j] = Math.max(f[i-1][j],f[i][j-1]);}}}System.out.println(f[n][m]);}
}

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

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

相关文章

uniapp聊天页面之消息滚动

目录 1、HTML部分 2、 Js部分 3、注意&#xff0c;滚动方法调用 1、HTML部分 用整个scroll-view的高度减去所有聊天内容的高度&#xff0c;得到的就是滚动条需要下拉的距离&#xff0c;即可使聊天页下拉至最底部。 需要给 scroll-view一个固定的高度&#xff0c;并获取消息…

Java解决IP地址无效化

Java解决IP地址无效化 01 题目 给你一个有效的 IPv4 地址 address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 "[.]" 代替了每个 "."。 示例 1&#xff1a; 输入&#xff1a;address "1.1.1.1" 输出…

算法-删除有序数组中的重复项

Q:给你一个有序数组nums &#xff0c;请你原地删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。 第一种解决方法&a…

高质量的外贸开发信标题都是怎样的?

今天在网上看到很多不错的开发信标题&#xff0c;觉得不错&#xff0c;收藏起来分享给大家学习。 标题是吸引读者打开邮件的第一印象&#xff0c;对于外贸销售人员来说&#xff0c;精心撰写开发信标题至关重要。客户收到的邮件那么多&#xff0c;那么在客户收件箱中的5至20个客…

vue项目如何禁止屏幕缩放,vue项目进行浏览器进行缩放

第一步 找到 html 文件 &#xff0c;在head中添加一行属性代码 <meta name"viewport" content"widthdevice-width,initial-scale1.0 ,maximum-scale1.0, user-scalable0">第二步 找到 App.vue 文件 &#xff0c;在 script 模块中 添加下方代码 // …

几个市场主流伦敦银交易系统简介

很多人在伦敦银交易中都希望建立一个交易系统&#xff0c;依靠这个系统&#xff0c;我们在市场中能够建立稳定盈利的基础。下面我们就来简单地介绍几个市场主流的伦敦银交易系统。 均线交易系统。这是很多人使用的伦敦银交易系统&#xff0c;一般适用于趋势行情中。均线交易系统…

如何定期跟踪和评估OKR的进度

设定跟踪周期 根据公司的实际情况和需要&#xff0c;设定合适的OKR跟踪周期。这个周期可以是每周、每月或每季度&#xff0c;以便及时了解OKR的进展情况。 使用进度图表 利用进度图表来可视化OKR的完成情况。这可以帮助团队更直观地了解目标的进度和剩余任务量&#xff0c;以…

uniapp直接连接wifi(含有ios和安卓的注意事项)

前言 小程序中直接连接wifi-----微信小程序 代码 启动 //启动wifistartWifi() {return new Promise((resolve, reject) > {uni.startWifi({success: (res) > {console.log(启动wifi 成功, res)resolve(true)},fail: (err) > {console.error(启动wifi 失败, err)uni.s…

【机器学习】【决策树】分类树|回归树学习笔记总结

决策树算法概述 基本概念 决策树&#xff1a;从根节点开始一步步走到叶子节点&#xff0c;每一步都是决策过程 对于判断的先后顺序把控特别严格 一旦将判断顺序进行变化则最终的结果将可能发生改变 往往将分类效果较佳的判断条件放在前面&#xff0c;即先初略分在进行细节分…

linux开发板设置密码登录

1、设置终端界面登录 inittab ::sysinit:/etc/init.d/rcS #::respawn:-/bin/sh ttyAMA0::askfirst:/bin/login #::respawn:/sbin/getty -L ttyAMA0 115200 vt100 #::restart:/sbin/init2、登录名 passwd root:x:0:0:root:/:/bin/sh3、密码加密 shadow root:$6$ButLCrnulfU4g…

http cookie,tcp syncookie 和 tcp fastopen 杂谈

syncookie 和 fastopen 的应用场景不赘述。它们均使用了 cookie 机制&#xff0c;返回给 client&#xff0c;再由 client 带回来用作识别。 说到它们的具体实现时&#xff0c;只要涉及 “识别” 机制&#xff0c;很多人都默认该机制需要 “解码 cookie”&#xff0c;“以 key …

c 枚举与字符串对 的几个方法

c使用枚举与字符串对的几种方法&#xff0c;供参考。 一 enum name { Zero, One, Two } ; const char* name[] {"Zero", "One", "Two"};//遍历 int size sizeof(name)/ sizeof(name[0]); //或字符串数组后加个空指针。 const char** ptr ; …

中国联通云技术,有哪些产品

中国联通国际公司&#xff0c;作为中国联通集团对外拓展国际市场的重要窗口与平台&#xff0c;已在国际电信领域取得了显著成就&#xff0c;其产品线涵盖了从基础联接到云端服务的多个层面&#xff0c;旨在为全球用户提供一体化、端到端的高品质信息服务解决方案。 大联接产品…

Mybatis-Plus——06,CRUD查

CRUD查 一、普通查询1.1、通过id查询单个用户1.2、通过id查询多个用户1.3、条件查询 通过map封装 二、分页查询2.1、配置分页插件2.2、运行方法 三、通过wrapper条件构造器查询3.1、查询name不为空&#xff0c;email不为空&#xff0c;age大于18的用户3.2、查询nameJone的用户3…

2024普通商家如何通过短视频矩阵快速破圈?

一个账号发1条作品&#xff0c;每条作品1000曝光覆盖1000人 十个账号发10条作品&#xff0c;每条作品1000播放量覆盖100000人 一百个账号发100条作品&#xff0c;每条作品1000播放量覆盖10000000人...... 如果我们有300个、500个账号甚至更多呢&#xff1f;自然每天能够覆盖到…

哪款洗地机值得买?希亦、追觅、米博、美的谁才是行业标杆?

在家庭清洁中&#xff0c;最让我们苦恼的便是厨房垃圾了&#xff0c;油渍跟食物残渣&#xff0c;用扫把扫了后&#xff0c;要反反复复的湿拖五六次&#xff0c;期间不停的手洗拖把&#xff0c;这套流程下来&#xff0c;往往容易腰酸背痛&#xff0c;手指皱巴巴的&#xff0c;这…

[数据集][图像分类]黄瓜叶子病害分类数据集172张3类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;172 分类类别数&#xff1a;3 类别名称:["nitrogen_and_potassium_def…

SAP MM学习笔记43 - 特殊调达流程 - 支付计划

以前学习了特殊调达流程 受托品和外注&#xff0c;中断了一阵儿去复习了PP了&#xff0c;咱继续回来研究MM。 SAP MM学习笔记42 - 特殊调达流程 - 受托品&#xff08;寄售&#xff09;-CSDN博客 SAP MM学习笔记41 - 特殊调达流程 - 外注加工-CSDN博客 本章讲SAP 特殊调达流程…

Get了!原来朋友圈定时发布如此简单!

你是不是也有这样的烦恼&#xff1f;微信号太多&#xff0c;有时候会顾不上发朋友圈&#xff1f; 别担心&#xff01;微信管理系统来帮你解决这个问题&#xff0c;实现朋友圈定时发布&#xff01;让我们一起来看看如何利用微信管理系统的强大功能来提升我们的社交媒体效率吧。…

Interceptor拦截器+JWT令牌实现登陆验证

一、背景 与过滤器的作用类似&#xff0c;不过拦截器是spring中的组件&#xff0c;只能拦截进入spring的请求&#xff1b;过滤器则可以拦截所有从前端页面发送来的请求。 *拦截器和过滤器选一就可以实现登陆验证&#xff0c;过滤器的实现在以下这篇博客中&#xff0c;有需要可…