当前位置: 首页 > news >正文

【39. 最长公共子序列】

思路

  • 第一个字符串是a,第二个字符串是b。
  • 划分依据(划分成四个子集)
    • 是以a[i]和b[j]是否包含在子序列当中
    • 一共四种情况a[i],a[j],a[i][j],都不选
    • f[i][j]所有的子序列全部都分到这四种情况
    • f[i][j]的最大值是我们这四个集合的最大值,再取max

在这里插入图片描述

注意

  • 对于0 1 是序列不包含a[i],但是一定包含b[j],而f[i-1][j]是所有在第一个序列前i - 1个字母出现,且在第二个序列的前j个字母出现的子序列,所以f[i-1][j]包含0 1集合,所以可以用f[i-1][j]代替0 1 集合的最大值。
  • 而且对于第一种集合f[i-1][j-1]可以不写,因为集合2(f[i-1][j])与集合3(f[i][j-1]包含了集合1的情况

可以代替的原因

  • 对于DP问题,属性有三种max, min, 数量
  • 例子:
    • 求A,B,C的最大值,我们可以先求max(A,B),max(B,C),然后再求这俩个max的最大值。而这里B出现了俩次,所以对于求最大值和最小值的可以使用该方法,而求数量就不可以

总结:

在这里插入图片描述

题目

在这里插入图片描述

代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n, m;
char a[N], b[N];     //字符串a和b
int f[N][N];

int main()
{
    cin >> n >> m;
    cin >> a + 1 >> b + 1;
    for(int i = 1; i <= n; i ++)
    {
        for (int j = 1; j <= m; j ++)
        {
            f[i][j] = max(f[i - 1][j], f[i][j - 1]);
            
            //因为最后一个集合a[i]和b[i],不一定存在,只有当序列a的第i个值与序列b的第j个值相等才可以
            //序列a是以i结尾,序列b是以j结尾,所以只有相等,才有可能是公共子序列
            if (a[i] == b[j]) f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);
        }
        
       
        
    }
     cout << f[n][m];
    return 0;
}

相关文章:

  • 计算机网络常考协议(HTTPHTTPs、TCP/UDP、DNS)
  • 服务器调制、调试和测试
  • 神经网络深度学习(三)优化器
  • Altium Dsigner 20 工艺参数设置修改
  • 2022“杭电杯” 中国大学生算法设计超级联赛(10)1 4题解
  • ssh免密登陆
  • 神经网络深度学习(二)激活函数
  • Java_Servlet处理请求流程
  • cadence SPB17.4 - allegro - modify shape
  • AJAX详细教程
  • 关于 在国产麒麟系统上使用QProcess配合管道命令执行shell命令获取预期结果输出失败 的解决方法
  • docker进阶——docker网络简解
  • 2022/09/01 day01:Git概述
  • 2022/09/02 day02:连接远程仓库,推送、克隆
  • 第18章linux系统-备份与恢复
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • interface和setter,getter
  • js学习笔记
  • Python_网络编程
  • react-native 安卓真机环境搭建
  • Tornado学习笔记(1)
  • Web设计流程优化:网页效果图设计新思路
  • 和 || 运算
  • 近期前端发展计划
  • 精彩代码 vue.js
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端相关框架总和
  • 浅谈Golang中select的用法
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 详解移动APP与web APP的区别
  • 异常机制详解
  • 在weex里面使用chart图表
  • ​iOS安全加固方法及实现
  • ​ubuntu下安装kvm虚拟机
  • (27)4.8 习题课
  • (9)目标检测_SSD的原理
  • (BFS)hdoj2377-Bus Pass
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (六)激光线扫描-三维重建
  • (循环依赖问题)学习spring的第九天
  • (转)Mysql的优化设置
  • (转)关于多人操作数据的处理策略
  • .NET BackgroundWorker
  • .NET Core中的去虚
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net mvc 获取url中controller和action
  • .NET MVC之AOP
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • @Async注解的坑,小心
  • @media screen 针对不同移动设备
  • @requestBody写与不写的情况
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票