保险箱(第十四届蓝桥杯省赛PythonB组)

news2024/10/7 2:57:46

小蓝有一个保险箱,保险箱上共有 n 位数字。

小蓝可以任意调整保险箱上的每个数字,每一次操作可以将其中一位增加 1 或减少 1。

当某位原本为 9 或 0 时可能会向前(左边)进位/退位,当最高位(左边第一位)上的数字变化时向前的进位或退位忽略。

例如:

00000 的第 5 位减 1 变为 99999;

99999 的第 5 位减 1 变为 99998;

00000的第 4 位减 1 变为 99990;

97993 的第 4 位加 1 变为 98003;

99909 的第 3 位加 1 变为 00009。

保险箱上一开始有一个数字 x,小蓝希望把它变成 y,这样才能打开它,问小蓝最少需要操作的次数。

输入格式

输入的第一行包含一个整数 n。

第二行包含一个 n 位整数 x。

第三行包含一个 n 位整数 y。

输出格式

输出一行包含一个整数表示答案。

数据范围

对于 30% 的评测用例,1≤n≤300;
对于 60% 的评测用例,1≤n≤3000;
对于所有评测用例,1≤n≤10^5,x,y中仅包含数字 0 至 9,可能有前导零。

输入样例:
5
12349
54321
输出样例:
11

 思路:

题目要求通过操作将一个 n 位的数字 x 调整为另一个 n 位的数字 y,且调整的操作次数最少。每一次操作可以将数字的某一位增加 1 或减少 1,同时需要考虑进位和退位的情况。

我们可以使用动态规划来解决这个问题。定义一个二维数组 dp,其中 dp[i][j] 表示将 x 的前 i 位调整为 y 的前 i 位时,最少需要的操作次数,且最高位为 j。我们可以从左到右逐位计算 dp 数组。

以下是详细的步骤:

  1. 初始化一个二维数组 dp,大小为 (n+1) * 10。其中 dp[i][j] 表示将 x 的前 i 位调整为 y 的前 i 位时,最少需要的操作次数,且最高位为 j。初始化为一个较大的值,比如 INF。

  2. 设置初始状态,即 dp[0][j],表示将空字符串调整为 y 的前 0 位时,最少需要的操作次数。这里只有一种情况,即空字符串调整为空字符串,操作次数为 0。因此 dp[0][j] = 0。

  3. 逐位计算 dp 数组。对于每一位 i 和可能的值 j,计算 dp[i][j]。具体计算方式如下:

    • 对于 j = 0 到 9,表示当前位的可能取值。
    • 对于当前位 i,计算从 x[i] 调整到 y[i] 的最小操作次数。假设 x[i] 的值为 xi,y[i] 的值为 yi。
    • 对于每个可能的进位 k,计算从 xi 调整到 yi 的最小操作次数,即 abs(xi + k - yi)。
    • 更新 dp[i][j] 为上述所有情况的最小值。
  4. 最终答案为 dp[n][y[0]],表示将 x 的所有位数调整为 y 的所有位数时,最少需要的操作次数,且最高位为 y[0]。

 

完整代码:

#include <iostream>
using namespace std;
#include <cstring>
#include <algorithm>
const int N=100010;
int n;
char a[N],b[N];
int dp[N][3];

int main(){
    cin>>n>>a>>b;
    memset(&dp,0x3f,sizeof(dp));
    dp[n][1]=0;
    for(int i=n-1;i>=0;i--)
        for(int j=0;j<3;j++)
            for(int k=-9;k<=9;k++)
                for(int t=0;t<3;t++)
                    if(a[i]+k+t-1-b[i]==(j-1)*10)
                    dp[i][j]=min(dp[i][j],dp[i+1][t]+abs(k));
    cout<<min({dp[0][0],dp[0][1],dp[0][2]})<<endl;
}

 

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

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

相关文章

视频美颜SDK详解:动态贴纸技术的前沿探索

当下&#xff0c;美颜SDK的动态贴纸技术作为视频美颜的独特亮点&#xff0c;吸引了越来越多开发者和用户的关注。 一、技术详解 动态贴纸技术是视频美颜SDK中的一项创新性功能&#xff0c;它通过在实时视频中添加各种动态效果&#xff0c;为用户提供更加生动有趣的拍摄体验。…

米贸搜|点燃Facebook广告的七大秘诀

一、巧用步步为营的广告投放策略 如果你是每天小预算的广告主&#xff0c;而广告目标是转化时&#xff0c;循序渐进的策略就很重要了。首先&#xff0c;不要过度关注购买转化&#xff0c;而是考虑在广告投放的初期&#xff0c;为浏览你的网站或者使用你的应用的用户创造一种愉…

[docker] Docker的数据卷、数据卷容器,容器互联

一、数据卷&#xff08;容器与宿主机之间数据共享&#xff09; 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现数据在宿主机与容…

GC26E31S国产芯片可替代AM26LV31E/TI,适用于马达编码等产品上

众所周知AM26LV31E是一款具有三态输出的四路差分线路驱动器。该驱动器具有15kV ESD&#xff08;HBM和IEC61000-4-2&#xff0c;气隙放电&#xff09;和8kV ESD&#xff08;IEC61000-4-2&#xff0c;接触放电&#xff09;保护。该器件旨在满足TIA /EIA-422-B和ITU建议V.11驱动器…

C#,数据检索算法之线性检索(Linear Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 线性&#xff1f;听起来就“高大上”&#xff0c;其实&#xff0c;只不过就是挨个比较呗。 本文发布&#xff08;听起来很正式 &#x…

文件操作---C++

文件操作目录 1.文本文件1.1写文件1.2读文件1.2.1第一种方式&#xff1a;流输入方式1.2.2第二种方式&#xff1a;getline成员函数1.2.3第三种方式&#xff1a;getline全局函数1.2.4第四种方式&#xff1a;按一个一个字符读取 2.二进制文件2.1写文件2.2读文件 程序运行时产生的数…

城市建筑白模数据

数据是GIS的血液。 水经注除了可以为你提供光学卫星影像和SAR影像外&#xff0c;还可以为你提供城市建筑白模数据&#xff0c;但目前仅覆盖全国各大重点城市。 那么&#xff0c;城市建筑白模数据覆盖了哪些城市呢&#xff1f; 城市建筑白模数据分布 城市建筑白模覆盖了全国…

便捷接口调测:API 开发工具大比拼 | 开源专题 No.62

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统&#xff0c;主要功能包括发送请求和获取实时响应。该项目具有以下核心优势&#xff1a; 轻量级&#xff1a;采用简约的 UI 设计。快速&#xff1a;实时发送请求并获得响应。支持多…

机器学习_集成学习之偏差和方差

文章目录 介绍偏差和方差——机器学习性能优化的风向标目标&#xff1a;降低偏差与方差数据集大小对偏差和方差的影响预测空间的变化带来偏差和方差的变化 介绍 集成学习&#xff0c;就是机器学习里面的协同作战。 如果训练出一个模型比较弱&#xff0c;又训练出一个模型还是…

【LIBS】交叉编译TCPDUMP

目录 1. 安装编译工具2. 设置环境变量3. 编译libpcap3.1 安装依赖3.2 交叉编译 4. 编译TCPDUMP4.1 克隆仓库与生成构建环境4.2 静态链接LIBPCAP4.3 动态链接LIBPCAP4.4 构建与安装 5. 查看交叉编译结果5.1 文件布局 1. 安装编译工具 sudo apt-get install -y autoconf automak…

【云原生】Docker如何构建镜像

目录 前言 一、基于已有的镜像创建 步骤一&#xff1a;先基于现有的镜像创建一个容器&#xff0c;然后进入容器去完成修改 步骤二&#xff1a;将该容器作为一个模板提交创建为一个新的镜像 步骤三&#xff1a;基于新的镜像&#xff0c;docker run创建一个容器&#xff0c;进…

2024年PMP备考学习资料整合汇总!!

你是否也有过类似的经历&#xff1f; 为了获取备考资料&#xff0c;有的同学在论坛、知乎或者相关垂直类网站下载了很多的资料&#xff0c;这些资料大部分是机构进行获客引流的资料&#xff0c;没有真正的干货。 经常会看到10G、20G的资料包&#xff0c;感觉内容很丰富&#xf…

当项目遭遇资源冲突时,如何巧妙化解?

在项目管理中&#xff0c;资源冲突是一个常见且棘手的问题。当多个项目争夺有限的资源时&#xff0c;如何妥善分配并确保项目顺利进行&#xff0c;成为每个项目经理必须面对的挑战。今天&#xff0c;我们就来探讨几个实用的行动方案&#xff0c;帮助你化解资源冲突&#xff0c;…

Git笔记:常用使用Git命令+使用Git关联本地仓库和远程仓库操作步骤

Git 分布式版本控制系统 常用Git命令 创建一个管理代码的文件目录右键Git Bath打开完成配置信息&#xff0c;输入个人用户名、邮件信息 git config --global user.name 用户名 git config --global user.email 邮箱地址初始化仓库 git init: 初始化仓库 文件目录里会出现一个…

Spring5学习笔记

Spring5 框架概述IOC(Inversion Of Control)IOC基本过程:IOC接口(BeanFactory)IOC接口实现类IOC操作Bean管理一、什么是Bean管理?二、什么是DI?三、Bean管理的两种实现方式1.基于XML配置文件方式实现基于XML方式创建对象基于XML方式注入属性常规属性注入特殊属性值的注入…

Windows中Zookeeper与kafka的安装配置

一、Zookeeper安装与使用 1.安装包下载 直接在官网下载即可Apache ZooKeeper。 下载后直接解压到本地即可。 2.环境配置 1> 在目录中下增加data和log文件夹 2> 解压目录下的 conf 目录&#xff0c;将目录中的 zoo_sample.cfg 文件&#xff0c;复制一份&#xff0c;重…

element el-date-picker type=“datetimerange“

刚写完结果需求变更了。封装的时间组件重新做。结合eacharts 。 直接上代码了 日期选择组件封装 <template><section class"warning-container"><header class"query-head"><el-form :inline"true" class"query-form…

IP被封怎么办?如何绕过IP禁令?

相信很多人遇到过IP禁令&#xff1a;比如你在访问社交媒体、搜索引擎或电子商务网站时会被限制访问&#xff0c;又或者你的的账号莫名被封&#xff0c;这些由于网络上的种种限制我们经常会遭遇IP被封的情况&#xff0c;导致无法使用继续进行网络行动。在本文中&#xff0c;我们…

nvm安装nodejs报错解决

1.出现如下报错 2.解决 去到nvm的安装目录&#xff0c;找到 /settings.txt文件 添加如下代码&#xff1a; node_mirror:npm.taobao.org/mirrors/node/ npm_mirror:npm.taobao.org/mirrors/npm/3.重新下载 如图成功解决

浅析HTTP协议

首先&#xff0c;前端请求后端数据&#xff0c;后端响应数据给前端&#xff0c;这是我们大家都知道的&#xff0c;那其中所涉及到的数据传输协议又是什么呢&#xff1f;这个传输规范就是我们大名鼎鼎的HTTP协议&#xff01; 什么是HTTP协议&#xff1f; HTTP&#xff08;超文本…