蓝桥杯大赛— —每日一题(7、最优包含)

2023-10-29

【问题描述】 本题总分:15 分
我们称一个字符串 S 包含字符串 T 是指 T 是 S 的一个子序列,即可以从
字符串 S 中抽出若干个字符,它们按原来的顺序组合成一个新的字符串与 T 完
全一样。
给定两个字符串 S 和 T,请问最少修改 S 中的多少个字符,能使 S 包含
T ?
【输入格式】
输入两行,每行一个字符串。第一行的字符串为 S,第二行的字符串为 T。
两个字符串均非空而且只包含大写英文字母。
【输出格式】
输出一个整数,表示答案。
【样例输入】
ABCDEABCD
XAABZ
【样例输出】
3
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ |T| ≤ |S | ≤ 20;
对于 40% 的评测用例,1 ≤ |T| ≤ |S | ≤ 100;
对于所有评测用例,1 ≤ |T| ≤ |S | ≤ 1000。
时间限制: 1.0s 内存限制: 256.0MB

【我的思路】

首先,很明显我们这道题要用到动态规划(dp)算法,动态规划简单来说就是要达到一个目标,中间的每个步骤都会影响到下一步的走法,为了找到最优的方法,所以这可以大大的降低时间复杂度。
对于这道题,我们可以设一个数组dp[i] [j]来存放S字符串中第i个字符之前的子串对比T字符串中第j个字符之前的子串至少需要修改多少个,可以想到dp[0][0]应该为0,因为相当于还没开始对比,所以不用修改,dp[i][0]也应该为0,因为……同理肯定也为0,也相当于还没开始对比嘛,但是,dp数组中其他的元素按理说都应该初始化为无穷大,因为题中说最少修改几个字符,那么我们可以用动态规划来解决时肯定是一步一步对比然后选择修改最少的字符,那么数组如何初始化为无穷大呢?这里我们就要用到 memset()函数,它是按照字节数来初始化的,具体怎么用可以问度娘。那么关键问题是我们然后一步一步对比呢?
首先当然是两层循环将S和T字符串中的没个字符爱格对比,然后看他们一样不,一样的话那么对应的dp数组元素肯定就为前一个dp元素的值不变,要是不一样,那么要么改变T中的一个字符(相当于dp[i-1][j-1]+1),要么就回到上一层中的那个元素的值(dp[i-1][j]),具体的哪个小就用哪个。不理解的话看看代码应该就差不多了。
代码如下

#include<iostream>
using namespace std;

char s[1000], t[1000];
int dp[100][100];
int main() {
    cin >> s + 1 >> t + 1;
    int n = strlen(s + 1), m = strlen(t + 1);
    memset(dp, 0x3f, sizeof dp);//至于为什么是0x3f,可以去看看整型字节数以及可以存储最大数的(要先明白memset()函数的用法)
    
    dp[0][0] = 0;

    for (int i = 1; i <= n; ++i)
    {
        dp[i][0] = 0;
        for (int j = 1; j <= m && j <= i; ++j)
        {
            if (s[i] == t[j]) 
            {
                dp[i][j] = dp[i - 1][j - 1];
            }
            else 
            {
                dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1] + 1);
            }
        }
    }
    cout << dp[n][m] << endl;
}

我接下来到蓝桥杯 比赛这段时间尽量每天做一道往年题目或者找到合适的发上来,一方面监督自己,一方面求大佬指正,希望一起进步一起学习哈!!!

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

蓝桥杯大赛— —每日一题(7、最优包含) 的相关文章

随机推荐

  • Linux系统GPIO应用编程

    目录 应用层如何操控GPIO GPIO 应用编程之输出 GPIO 应用编程之输入 GPIO 应用编程之中断 在开发板上测试 GPIO 输出测试 GPIO 输入测试 GPIO 中断测试 本章介绍应用层如何控制GPIO 譬如控制GPIO 输出高
  • 【图论算法】二分图:染色法与匈牙利算法

    AcWing 860 染色法判定二分图 AcWing 860 染色法判定二分图 二分图 二分图就是可以把所有点划分到两边集合中去 使得所有的边在两个集合外且在两个集合之间 集合内部没有边的图 二分图的性质 当且仅当图中不含有奇数环 奇数环
  • java登录界面(1/2)(准备工作)(每个层都将的详细,拿来就用)

    目录 1 项目模块 依赖准备 2 数据库数据准备 3 前端界面准备 首先要知道登录的逻辑是什么 首先由用户在前端form表格输入账号和密码 然后由前端发送ajax请求给后端 然后后端拿到数据后 通过拿到数据库里面的数据 进行比对 若比对成功
  • 文件代码模板的使用

    文件代码模板的使用 发布于 2015 09 23 23 00 17 5 次阅读 评论 0 来源 网络整理 本篇内容为大家提供的是IntelliJ IDEA 使用教程中的文件代码模板的使用 IntelliJ IDEA是java语言开发的集成环
  • 异常java.lang.NumberFormatException解决

    原因一 超出了int类型的取值范围 项目中要把十六进制字符串转化为十进制 用到了到了Integer parseInt str1 trim 16 这个是不是后抛出java lang NumberFormatException异常 让老子看了半
  • OpenWrt使用命令行设置有线无线网络,安装luci

    原文 http vipshichg iteye com blog 1924265 utm source tuicool utm medium referral 在我们将路由器固件刷成开源的基于Linux内核的openwrt系统后 由于ope
  • 在Mac上关于tomcat服务器的安装、配置、启动、部署web详细流程

    之前在Mac上通过安装mamp来搭建PHP环境服务器 但是对于java来说 目前还是没有找到类似mamp这样强大的软件来构建及管理java环境服务器 所以目前也是通过命令行来进行tomcat服务器的安装和启动 简要的总结一下在Mac上进行t
  • 解决 libcurl.so.4: no version information available

    解决 libcurl so 4 no version information available 2017 04 03 晨晨 分类 Linux 阅读 11610 评论 1 使用自编译的 curl 后 可能会遇到这个问题 usr bin cu
  • RK3566恢复显示屏异常显示的方法

    设备进行EMI静电测试时 LCD显示屏异常之后不能恢复 需要在软件上检测LCD是否处于工作状态 如果没有处于工作状态 则需要重启LCD 如何确定LCD是否处于工作状态 参照SDK docs Common DISPLAY路径下的Rockchi
  • python爬虫练习

    python爬虫 第一章 Python 爬虫学习入门的使用 爬虫练习第一周 python爬虫 前言 一 什么是网络爬虫 二 爬虫有什么用 三 练习题 dome1 dome2 dome3 dome4 dome5 dome6 dome7 dom
  • 【日常-bug】文件上传oss报错-跨域- ‘Access-Control-Allow-Origin

    环境 docker nginx vue3 spring cloud oss 阿里文件上传服务 场景 上传文件大小 结果 前端页面 小于1M 正常 前端页面 大于1M 报错 postman 调接口 大于1M 正常 报错信息 Access to
  • Java 设计模式(六):代理模式

    代理模式 GitHub 地址 https github com yifanzheng java design patterns 代理模式 Proxy Design Pattern 在不改变原始类代码的情况下 通过引入代理类来给原始类增加功能
  • QT中槽的使用

    一 建立槽和按钮之间的连接 connect 信号发送者 发送的信号 信号接收者 信号接收者的槽函数 1 例子 connect ui gt pushButton SIGNAL clicked bool this SLOT showinfo 解
  • 11-11 重定向标准输入输出流(部分待定)

    1 freopen 将 stdout 重定向到其他文件流 stdout 是输入到控制台中的文件流 但可以通过 freopen 函数将其重定向到其他文件流 即输出内容不再显示在控制台 而在指定文件流 例如自定义的文件 中 例如 将 stdou
  • ElementUI 组件设置全局默认值

    最近碰到个需求 要求把管理系统的所有 el select 元素都添加 clearable 属性 整个管理系统估计有几百个页面 el select 的数量更是不计其数 如果用传统方法一个一个的找然后添加属性 绝对是不现实的 实际上可以通过设置
  • 使用docker安装mindspore1.3.0

    使用命令拉取镜像 sudo docker pull swr cn south 1 myhuaweicloud com mindspore mindspore gpu 1 3 0 运行 docker run it v dev shm dev
  • 分类算法之朴素贝叶斯——简单天气预报算法

    这两天学习了一个相对比较简单但是十分实用的分类算法 贝叶斯分类算法 与我做项目使用的svm算法相比确实有很多精妙之处 好比撒尿牛丸 好吃又好玩 而贝叶斯分类器则是简单又强大 本文结合简单天气预报进行讲解 贝叶斯定理 贝叶斯定理是概率论里面一
  • mobaxterm ssh登录access denied解决方法

    因为想要在远程复制文件到控制的虚拟机中 因此xterm这边要以root的身份登录 建立会话开启连接后会提示你 login as 输入root 然后输入密码 但是显示 Access denied 可能原因 在虚拟机中ssh的配置文件中设置的不
  • 【测试开发】关于性能测试的各种指标

    关于性能测试的各种指标 本指标适用于使用性能测试进行性能测试项目技术质量评价依据 规范技术测试结果评价 统一性能测试技术测试质量度量 应用系统技术质量度量指标范围广泛 本文难以涵盖全部 预期读者为测试管理人员 测试实施人员 技术支持人员 项
  • 蓝桥杯大赛— —每日一题(7、最优包含)

    问题描述 本题总分 15 分 我们称一个字符串 S 包含字符串 T 是指 T 是 S 的一个子序列 即可以从 字符串 S 中抽出若干个字符 它们按原来的顺序组合成一个新的字符串与 T 完 全一样 给定两个字符串 S 和 T 请问最少修改 S