POJ--1458:Common Subsequence (DP求最长公共子序列)

2023-11-03

1. 题目源地址:http://poj.org/problem?id=1458

2. 基本题意: 给出两个序列,求出最长子序列的长度并输出。经典的动态规划求解。

    求最长公共子序列的经典DP解法代价为O(mn),其中m和n分别为两个字符串的长度。具体实现如下表:


                       


    该表的建立自左而右,自上而下。规则建立如下:

(1)如果str1[i]=str2[j]则将左上角元素值加1赋值给matrix[i][j](自己),如果本身是最左上角元素就为1。

(2)如果str1[i]不等于str2[j]则该点元素值取matrix[i-1][j]和matrix[i][j-1]中较大的一个。

(3)如果i=0且j=0(最左上角)则取0。

     下划线元素为最终取得的最长公共子序列。

  动态规划方程:


3. 解题代码:

//POJ--1458:Common Subsequence   寻找最长公共子序列
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
    char a[210],b[210];
    int dp[210][210];
    int len_a,len_b,i,j;
    
    while(cin>>a>>b)
    {
       len_a=strlen(a);
       len_b=strlen(b);
       
       dp[0][0]=0;
          
       for(i=1;i<=len_a;i++)
          for(j=1;j<=len_b;j++)
          {
             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]);
          }
       
       cout<<dp[len_a][len_b]<<endl;
    }
    return 0;
}


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

POJ--1458:Common Subsequence (DP求最长公共子序列) 的相关文章

  • 12、剪绳子——剑指offer——动态规划

    剪绳子 问题描述 给你一根长度为n的绳子 请把绳子剪成m段 m和n都是整数 n gt 1并且m gt 1 每段绳子的长度记为k 0 k 1 k m 请问k 0 k 1 k m 可能的最大乘积是多少 首先本题可以用贪婪算法和动态规划算法求解
  • 模糊匹配之——BK树与拼写纠正

    介绍 拼写纠错功能常常出现在比较高级的文本编辑应用中 例如大家熟知的word 高级一点的IDE例如Jet Brains系列 在一些在线翻译上 也有自动校正拼写的功能 例如谷歌翻译 原理 拼写纠正的实现方式有多种 这里使用的是一种名为BK树的
  • 洛谷 P1026 [NOIP2001 提高组] 统计单词个数

    题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串 该字串以每行 20 个字母的方式输入 且保证每行一定为 20 个 要求将此字母串分成 k 份 且每份中包含的单词个数加起来总数最大 每份中包含的单词可以部分重叠 当选用一个
  • Python实现找零兑换的三种解法

    找零兑换 找零兑换问题最直接的解法就是贪心策略 比如问题 有面值1 5 10 25的硬币 求解兑换63元所需的最少硬币数 贪心策略的思想就是不断的利用面值最大的硬币去尝试 不行了 在尝试较小面值的硬币 该例中也即使用25的硬币去尝试 2枚2
  • HDU--1247:Hat’s Words (字典树)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1247 2 解题思路 第一次接触字典树 代码也是参考别人的 代码参考博客 http blog csdn net red flame artic
  • 最长公共上升子序列(LCIS)

    前置知识 LCS LIS 注意 刚开始看这个问题的时候 第一反应是先求出LCS再求出LCS的LIS 事实上这是有问题的 我们并不能保证这么求出的LCIS是最长的 比如下面这个例子 Example a 7 1 5 6 4 2 7 b 7 1
  • 2023华为OD机试真题(java 100%通过)【最多获得的短信条数/动态规划】

    题目内容 某云短信厂商 为庆祝国庆 推出充值优惠活动 现在给出客户预算 和优惠售价序列 求最多可获得的短信总条数 输入描述 第一行客户预算M 其中 0 M 10 6 第二行给出售价表 P1 P2 Pn 其中 1 n 100 Pi为充值 i
  • 入门级动态规划五步法(斐波那契数)

    1 确定dp数组 dp table 以及下标的含义 2 确定递推公式 3 dp数组如何初始化 4 确定遍历顺序 5 举例推导dp数组 class Solution def fib self n int gt int if n 0 retur
  • 动态规划练习一 14:怪盗基德的滑翔翼

    描述 怪盗基德是一个充满传奇色彩的怪盗 专门以珠宝为目标的超级盗窃犯 而他最为突出的地方 就是他每次都能逃脱中村警部的重重围堵 而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼 有一天 怪盗基德像往常一样偷走了一颗珍贵的钻石 不料却被柯
  • 【类】二维dp:动态规划背包问题

    dp n m 含义就是 当有n种物品时且背包有m容量时 这个背包能产生的最大价值 状态转换关系是 dp n m dp n 1 m dp n 1 m 新物品重量 意思就是 当面对新来的一个物品时 求这个情况下 背包能产生的最大价值 相当于求下
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • leetcode-动态规划【背包问题】

    背包问题篇 基础背包 416 分割等和子集 1049 最后一块石头的重量ii 494 目标和 474 一和零 完全背包 518 零钱兑换ii 377 组合总和iv 70 爬楼梯 322 零钱兑换 279 完全平方数 139 单词拆分 多重背
  • 洛谷P1028 [NOIP2001 普及组] 数的计算 —— 简单DP+双指针优化

    This way 题意 给出自然数 n n n 要求按如下方式构造数列 只有一个数字 n n n 的数列是一个合法的数列 在一个合法的数列的末尾加入一个自然数 但是这个自然数不能超过该数列最后一项的一半 可以得到一个新的合法
  • 代码随想录算法训练营第十九天

    动态规划系列5 6 7 8 377 组合总和 未看解答自己编写的青春版 重点 代码随想录的代码 我的代码 当天晚上理解后自己编写 求排列数的题 用二维DP过不了 自己捋逻辑的话 也是可以觉得有漏洞 但是怎么修改 一下子还没思路 包括后面的
  • POJ-1458最长公共子序列

    给定序列的子序列是给定序列 其中遗漏了一些元素 可能没有 给定序列X
  • 0动态规划中等 NC206 跳跃游戏(二)

    NC206 跳跃游戏 二 描述 给定一个非负整数数组nums 假定最开始处于下标为0的位置 数组里面的每个元素代表下一跳能够跳跃的最大长度 如果可以跳到数组最后一个位置 请你求出跳跃路径中所能获得的最多的积分 1 如果能够跳到数组最后一个位
  • C++---背包模型---装箱问题(每日一道算法2023.3.9)

    注意事项 本题是 动态规划 01背包 的扩展题 dp和优化思路不多赘述 题目 有一个箱子容量为 V 同时有 n 个物品 每个物品有一个体积 正整数 要求 n 个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入格式 第一行是一个整数
  • 蓝桥杯:斐波那契数列最大公约数

    题目表示的很明确 要用两个算法 斐波那契数列是很经典的dp问题 最大公约数是很经典的辗转相除法 从而我理所应当的就定义一个数组存放斐波那契数列 long long int F 2021 0 F 1 1 F 2 1 for int i 3 i
  • 01背包(c++版)

    dp i j 表示从下标为 0 i 的物品里任意取 放进容量为j的背包 价值总和最大是多少 void test 2 wei bag problem1 vector
  • 超简单:很火的3D立体动态相册,送给心爱的那个人

    1 首先 我们一共需要三个文件 目录关系如下所示 先建index html文件吧 电脑上先创建一个 txt文件 在里面加入代码后保存 重命名为index html 记得把原来的 txt后缀覆盖 html我用的谷歌浏览器 index html

随机推荐

  • 【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

    1 图的遍历基本思路与方法 图的遍历的定义与visited数组 常用的遍历方法 深度优先搜索遍历 Depth First Search DFS 广度优先搜索遍历 Breadth First Search BFS 2 深度优先搜索遍历 Dep
  • 华为SMC2.0视频会议系统总结(一)

    简单总结下 新上手的华为视频会议SMC2 0会控系统 第一次接触华为的会控系统 理解的不是很深刻 简单的记下来 省得以后忘记 因为客户使用的泛微OA系统 我们公司 南大智慧 负责提供华为设备 并做相应的接口开发工作 我们主要的工作内容就是确
  • 控制器的编码器

    一 原理 控制器内部为每个轴配置了脉冲计数装置 控制器默认的脉冲计数源是外部编码器 如果用户 在接线时将外部编码器的信号与端子板 25pin轴接口的编码器信号接在一起 就可以调用指令读取外部编码器的值 如果用户没有接外部编码器反馈信号 例如
  • java基础学习 day22(方法,return,重载)

    1 方法 是程序中最小的执行单元 方法里面的代码 要么全都执行 要么全都不执行 重复的代码 具有独立功能的代码可以抽取到方法中 方法的好处 可以提高代码的复用性 可以提高代码的可维护性 java虚拟机在运行时会先自动调用main 方法 2
  • ## 带AB相编码器直流减速电机测转动速度及角度深度解析

    带AB相编码器直流减速电机测转动速度及角度深度解析 下图为编码器输出的AB相波形 一般情况下 我们只测A相 或B相 的上升沿或下降沿 但四倍频的方法是测A相和B相的上升沿和下降沿 在同样的时间内 计数脉冲是以前的4倍 然后stm32单片机可
  • 一致性的3种协议,并发,事务

    Two Phase Commit MVCC Paxos TPC对应于传统数据库上的local cluster的一致性 分布式事务 每个节点上的local事务可以是不同的亦可以是相同的 replica MVCC的思想是抓住Transactio
  • vue项目中使用vee-validate表单验证

    一 写在前面 作为前端开发 在项目中避免不了做表单到页面 做表单页面就避免不了要做表单效验 如果多个表单页面有相同都表单比如用户名 密码等等 不能每个页面都写一次验证规则 作者项目平时使用都vue比较多 所有使用vee validate插件
  • C++标准模板库(Standard Template Library,STL)

    文章目录 标准模板库介绍 C 标准库头文件 STL 组成 迭代器 算法 适配器 标准模板库介绍 标准模板库 Standard Template Library STL 是惠普实验室开发的一系列软件的统称 虽说它主要出现到C 中 但在被引入C
  • JDK安装及JAVA环境变量配置(JDK1.8版本)

    一 JDK官网下载地址 https www oracle com technetwork java javase downloads jdk12 downloads 5295953 html JDK1 8下载地址 https www ora
  • 网络爬虫反反爬小技巧(二)Pyppeteer

    上一节说到了Selenium 它的功能的确非常强大 但很多时候我们会发现 Selenium 还是有一些不太方便的地方 比如速度太慢 对版本配置要求严苛 最麻烦是经常要更新对应的驱动 还有些网页是可以检测到是否使用了Selenium 所以在这
  • STL hash_map使用

    今天在使用STL中的hash map模板遇到使用PTCHAR作为Key时无法对字符串进行正确比较的问题 在网上查找相应的文章可惜没有找到 但找到了http www stlchina org twiki bin view pl Main ST
  • EXT文件系统族-Ext2文件系统

    一 学习内容 1 Ext2物理结构 2 Ext2数据结构 3 Ext2文件系统操作 二 Ext2物理结构 Ext2第二代扩展文件系统 Second extended filesystem 是LINUX内核使用的文件系统 Ext2文件系统特性
  • Java回调(callback)机制

    一 简述 从软件模块之间的调用方式看 分为三类 同步调用 异步调用和回调 1 同步调用 同步调用是最基本并且最简单的一种调用方式 类 A 的 a 调用类 B 的 b 一直等待 b 执行完毕 a 继续往下走 该调用方式适用于 b 执行时间不长
  • 【Node.js】node入门全攻略

    文章目录 一 初识 Node js 一 JS 解析引擎 二 JS 运行环境 三 Node js 1 作用 2 命令 二 fs 文件系统模块 一 fs 模块 二 方法 1 fs readFile 2 fs writeFile 3 路径动态拼接
  • Qt--深度图伪彩色渲染

    项目源码地址 Windows Linux安装包 之前写了一个小程序 对深度图做伪彩色渲染 便于可视化 也可以打开ppm的彩色图片 界面大概长这样
  • C练习实例11-15题打卡

    目录 题目11 思路 代码 结果 题目12 思路 代码 结果 题目13 思路 代码 结果 题目14 思路 代码 结果 题目15 思路 代码 结果 题目11 古典问题 兔子生崽 有一对兔子 从出生后第3个月起每个月都生一对兔子 小兔子长到第三
  • Android列表小部件(Widget)开发详解

    好久没博客更新了 本篇文章来学习一下如何实现一个Android列表小部件 效果可以参看下图 这个页面如果是在App内部实现 相信只要有一点Android基础的童鞋都能很轻松写出来 但是如果放到Widget中可能就不是那么简单了 因为Widg
  • c++ curl +openssl 编译包,以求支持HTTPS传输

    在window平台下 自己DIY编译OpenSSL Libcurl 来支持HTTPS传输协议 1 缘起 原来就了解些libcurl 一直没有机会在项目实际使用libcurl 恰好最近一个云存储的项目 服务器使用openstack 恰好我负责
  • 中国近五年的计算机专业就业率,未来五年,我国最有发展前途的工科专业,毕业好就业,发展前途好...

    还有几天时间高考成绩就要公布了 等到成绩公布之后 同学们就要着手准备填报志愿的事情 填报志愿也是一件非常重要的事情 影响着我们未来的就业前途与发展方向 因此在填报志愿之前一定要做足功课 对各个院校与专业的录取分数线 未来的就业前途都要进行详
  • POJ--1458:Common Subsequence (DP求最长公共子序列)

    1 题目源地址 http poj org problem id 1458 2 基本题意 给出两个序列 求出最长子序列的长度并输出 经典的动态规划求解 求最长公共子序列的经典DP解法代价为O mn 其中m和n分别为两个字符串的长度 具体实现如