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

小蓝有一个保险箱,保险箱上共有 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.mfbz.cn/a/350693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AM5-DB低压备自投装置在河北冠益荣信科技公司洞庭变电站工程中的应用——安科瑞赵嘉敏

摘 要&#xff1a;随着电力需求的不断增加&#xff0c;电力系统供电可靠性要求越来越高&#xff0c;许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性&#xff0c;该类装置能够在工作电源因故障断开后&#xff0c;自动且迅速地将备用电源投…

Lisflood

3.耦合LisFlood模型 C解决方案在\LisFlood\LISFLOOD-FP-trunk 执行在LisFlood\LISFLOOD-FP-trunk\out\build\msvc-x64-Debug 3.1输入文件 文献&#xff1a;基于&#xff33;&#xff37;&#xff2d;&#xff2d;和&#xff2c;&#xff29;&#xff33;&#xff26;&#…

vue day06

1、路由模块封装 2、声明式导航 实现导航高亮效果 直接通过这两个类名对相应标签设置样式 点击a链接进入my页面时&#xff0c;a链接 我的音乐高亮&#xff0c;同时my下的a、b页面中的 我的音乐也有router-link-active类&#xff0c;但没有精确匹配的类&#xff08;只有my页…

HTTP连接池在Java中的应用:轻松应对网络拥堵

网络拥堵是现代生活中无法避免的问题&#xff0c;尤其是在我们这个“点点点”时代&#xff0c;网页加载速度直接影响到我们的心情。此时&#xff0c;我们需要一位“救世主”——HTTP连接池。今天&#xff0c;就让我们一起探讨一下&#xff0c;这位“救世主”如何在Java中大显神…

12个强大的 JavaScript 动画库,可帮助你提升用户体验

文章目录 12个强大的 JavaScript 动画库&#xff0c;可帮助你提升用户体验1.Anime.js2.Lottie3. Velocity4.Rough Notation5.Popmotion6. Vivus7.GSAP&#xff1a;Green Stocking Animation Platform8. Three.js9.ScrollReveal10.Barba.js11.Mo.js12.Typed.js总结 12个强大的 J…

【Python】01快速上手爬虫案例一:搞定豆瓣读书

文章目录 前言一、VSCodePython环境搭建二、爬虫案例一1、爬取第一页数据2、爬取所有页数据3、格式化html数据4、导出excel文件 前言 实战是最好的老师&#xff0c;直接案例操作&#xff0c;快速上手。 案例一&#xff0c;爬取数据&#xff0c;最终效果图&#xff1a; 一、VS…

降维(Dimensionality Reduction)

1.动机一&#xff1a;数据可视化 将数据可视化&#xff0c;我们便能寻找到一个更好的解决方案&#xff0c;降维可以帮助我们。 假使我们有有关于许多不同国家的数据&#xff0c;每一个特征向量都有 50 个特征&#xff08;如 GDP&#xff0c;人均 GDP&#xff0c;平均寿命等&a…

python深度学习—第6章(波斯美女)

第6章 深度学习用于文本和序列 6.1 处理文本数据 与其他所有神经网络一样&#xff0c;深度学习模型不会接收原始文本作为输入&#xff0c;它只能处理数值张量。 文本向量化&#xff08;vectorize&#xff09;是指将文本转换为数值张量的过程。它有多种实现方法。 将文本分割…

力扣80、删除有序数组中的重复项Ⅱ(中等)

1 题目描述 图1 题目描述 2 题目解读 对于有序数组nums&#xff0c;要求在不使用额外数组空间的条件下&#xff0c;删除数组nums中重复出现的元素&#xff0c;使得nums中出现次数超过两次的元素只出现两次。返回删除后数组的新长度。 3 解法一&#xff1a;双指针 双指针法可以…

【代码随想录-数组】二分查找

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

学习笔记-李沐动手学深度学习(四)(12-13,权重衰退、L2正则化、Dropout)

总结 【trick】过拟合及正则化项参数的理解 实际数据都有噪音&#xff0c;一般有噪音后&#xff0c;模型实际学习到的权重w就会比 理论上w的最优解&#xff08;即没有噪音时&#xff09;大。&#xff08;QA中讲的&#xff09; 【好问题】 &#xff08;1&#xff09;不使用正…

Jupyter Notebook安装以及简单使用教程

Jupyter Notebook安装以及简单使用教程 本文章将&#xff0c;简要的讲解在已经拥有Python环境下如何进行Jupyter Notebook的安装。并且简短的介绍Jupyter Notebook的使用方法。 Jupyter Notebook是什么 Jupyter Notebook是一个基于Web的交互式计算环境&#xff0c;它支持多种…

101.乐理基础-五线谱-五线谱的构造、谱号是什么

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;100.乐理基础-五线谱-是否需要学习五线谱-CSDN博客 首先简谱的构造&#xff0c;如下图&#xff1a;真正影响音乐的是左上角的三部分&#xff0c;调号、拍号、情绪与速度&#xff0c;如图1 然后不管用什么谱&#xf…

代码随想录第十七天| ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

文章目录 110.平衡二叉树思路-递归&#xff1a;代码&#xff1a; 思路二-迭代 257. 二叉树的所有路径思路一&#xff1a;普通递归 思路二&#xff1a;递归优化思路三&#xff1a;迭代法&#xff08;没细看&#xff09; 404.左叶子之和思路-递归 110.平衡二叉树 思路-递归&#…

解决WinForms跨线程操作控件的问题

解决WinForms跨线程操作控件的问题 介绍 在构建Windows窗体应用程序时&#xff0c;我们通常会遇到需要从非UI线程更新UI元素的场景。由于WinForms控件并不是线程安全的&#xff0c;直接这样做会抛出一个异常&#xff1a;“控件’control name’是从其他线程创建的&#xff0c;…

Oracle DG环境下的秘钥管理

今天有朋友问到1&#xff09;DG环境下的秘钥管理需要注意什么&#xff0c;2&#xff09;秘钥管理对DG的日志同步有影响吗&#xff1f; 对于2&#xff09;的回答是明确的&#xff0c;没有影响。秘钥的管理和DG的redo log shipping完全是两套机制。在最新版的Oracle Key Vault常…

基于YOLOv7算法的高精度实时五类动物目标检测系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时五类动物目标检测系统可用于日常生活中检测与定位狼、鹿、猪、兔和浣熊&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标…

多数据源 dynamic-datasource 模块使用

在项目中引入dynamic-datasource该modul 在application.yml中添加 dynamic:datasource:slave1: driver-class-name: oracle.jdbc.OracleDriverurl: jdbc:oracle:thin:XXX:orcl_tjhusername: XXpassword: XXvalidation-query: SELECT 1 FROM DUALslave2: driver-class-name: co…

广东建筑模板厂家批发-建筑木模板市场供应

近年来&#xff0c;随着建筑行业的快速发展&#xff0c;建筑模板作为一种不可或缺的建筑材料&#xff0c;备受关注。广东作为中国建筑业的重要发展地区之一&#xff0c;其建筑模板市场也日渐繁荣。在这个市场中&#xff0c;建筑模板厂家能强优品木业成为了备受青睐的选择&#…

操作符详解(上)

目录 操作符的分类 二进制和进制转换 2进制转10进制 10进制转2进制数字 2进制转8进制 2进制转16进制 原码、反码、补码 移位操作符 左移操作符 右移操作符 位操作符&#xff1a;&、|、^、~ 单目操作符 逗号表达式 操作符的分类 • 算术操作符&#xff1a; …
最新文章