UVa 1631 Locker (密码锁)

UVa 1631 Locker(DP) 题意 有一个NNN(N≤1000N\leq1000N≤1000)位密码锁,,每位都是0~9,可以循环旋转。 每次可以让1~3个相邻数字同时往上或者往下转一格。 例如,567890->567901(最后3位向上转)。 输入初始状态和终止状态(长度不超过1000),问最少要转几次。 例如,111111到222222至少转2次,由896521到183995则要转12次。 思路 首先从搜索的角度上去... 阅读详情

题目地址

Virtual Judge
UVa

题目做法

dp[i][j][k] 表示使得 i 及其之前的所有锁归位,i + 1 位置上向上转动 j 个单位,i + 2 位置上向上转动 k 个单位的最小步数
那么我们可以通过刷表法来完成 dp
首先我们枚举第 i 层 j 和 k,然后可以算出 i + 1 位还需要多少次操作才能归位。
然后枚举 i + 2 位的向上旋转次数,由于可以 1~3 位一起转动,所以 i + 2 和 i + 3 转动到比 i + 1 位少的步数的话是可以和 i + 1 共享部分步数的
我们可以计算出新的 i + 2 位的相对向上的移动量,然后刷表
这里向下旋转的步数要注意用 10- 来转化为向上旋转的步数,但在转移步数的时候还是应加上原始向下的步数
初始状态 dp[0][0][0] = 0 即没有任何旋转
终止状态 dp[len][0][0] 即 len 位都被旋转到指定数字的最小步数

代码

https://code.youkuaiyun.com/snippets/1888582

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 1000
char s[MAXN + 5], t[MAXN + 5];
int dp[MAXN + 5][10][10];
int main() {
    while(scanf("%s%s", s + 1, t + 1) != EOF) {
        int len = strlen(s + 1);
        memset(dp, 0x3f, sizeof dp);
        dp[0][0][0] = 0;
        for(int i = 0; i < len; ++i)
            for(int j = 0; j <= 9; ++j)
                for(int k = 0; k <= 9; ++k) {
                    /** 向上旋转 */
                    int cnt = (t[i + 1] - (s[i + 1] + j) + 20) % 10;
                    for(int j1 = 0; j1 <= cnt; ++j1)
                        for(int k1 = 0; k1 <= j1; ++k1) {
                            int nj = (k + j1) % 10;
                            dp[i + 1][nj][k1] = min(dp[i + 1][nj][k1], dp[i][j][k] + cnt);
                        }
                    /** 向下旋转 */
                    cnt = (s[i + 1] + j - t[i + 1] + 10) % 10;
                    for(int j1 = 0; j1 <= cnt; ++j1)
                        for(int k1 = 0; k1 <= j1; ++k1) {
                            int nj = (k - j1 + 10) % 10; //注意要转换为向上旋转的步数,便于统一 | (10 - k1) 也是转化
                            dp[i + 1][nj][(10 - k1) % 10] = min(dp[i + 1][nj][(10 - k1) % 10], dp[i][j][k] + cnt);
                        }
                }
        printf("%d\n", dp[len][0][0]);
    }
}
Mem0 vs LangMem vs Letta:三大AI记忆框架实战对比(附代码示例) 本文深入对比了Mem0、LangMem和Letta三大AI记忆框架的核心特性与适用场景。Mem0提供开箱即用的记忆管理服务,适合快速集成;LangMem深度融入LangGraph生态,适合复杂工作流;Letta则采用虚拟内存系统,旨在突破上下文窗口限制。文章通过实战代码示例,为开发者选择适合其业务需求的AI记忆解决方案提供了清晰指南。 阅读详情

相关推荐

六自由度机械臂运动学分析及其轨迹规划

六自由度机械臂轨迹规划 通过对比三次多项式插值法与五次多项式插值法的效果,选取后者对机械臂进行轨迹规划,将运动学解导入Matlab Robotics Toolbox仿真,得到各关节角度、速度和加速度与时间关系曲线。 三次多项式插值法 三次多项式有4个待定系数,可同时对起始点和目标点的角度和角速度给出约束条件。 数学公式 MATLAB代码 五次多项式插值法 五次多项式有6个待定系数,可同时对起始点和...

两条眉毛 6万+

uva 1631——Locker

题意:有一个n位的密码锁,每位都是0——9可以循环旋转,每次可以往上或者往下旋转一下,然后给定初始状态和末状态求最小旋转步数。 思路:递推,dp(i,x,y)表示翻到i位第i+1位为x,第i+2位为y的最小步数,枚举上翻状态,找到正翻和倒翻的最小值。 code: #include using namespace std; #define cls(a,c) memset(a

坚持不懈 1096

Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

cm4配置ros mavros连接pixhawk4 Pixhawk RPi CM4 Baseboard

baidu_41704597的博客 2127

Uva1631_分阶段动态规划

动态规划训练2——Uva1631                     Locker A password locker with N digits, each digit can be rotated to 0-9 circularly. You can rotate 1-3 consecutive digits up or down in one step. For examples: 56...

qq_42663062的博客 385

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 254

Visual C++与WPF混合开发:C++/CLI桥接技术实现现代化桌面应用

在桌面应用开发领域,混合编程技术是连接不同技术栈、复用核心资产的关键手段。其核心原理在于通过特定的桥接层,实现托管代码与非托管代码之间的互操作,从而打破语言和运行时环境的壁垒。这项技术的核心价值在于,它允许开发者将高性能、高稳定性的原生C++业务逻辑库,与现代化、高表现力的WPF用户界面无缝结合,避免了重写核心代码的巨大成本和风险。在工业控制、数据可视化、上位机软件等对性能和界面均有高要求的应用场景中,这种架构尤为适用。本文以C++/CLI作为桥接技术,详细演示了如何构建一个包含原生C++核心层、C++/C

weixin_33146151的博客 277

UVA1631 - Locker

#include #include #include #include #include #include using namespace std; const int maxn=1000+10; const int INF=100000000; char s1[maxn],s2[maxn]; int cost[maxn][maxn],dp[2][maxn]; void Init()

hyqsblog的专栏 559

【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现

简介QDM原理及其MATLAB代码实现

WW、forever的博客 5859

UVa 1631 密码锁

https://vjudge.net/problem/UVA-1631 题意: 有一个n位密码锁,每位都是0~9,可以循环旋转。每次可以让1~3个相邻数字同时往上或者往下转一格。输入初始状态和终止状态,问最少要转几次。 思路: d[i][x][y][z]表示当前在复原第 i 位,当然前 i 位已经复原完毕,x代表第 i 位的数字,y代表第 i+1的数字, z代表第 i+2 的数字时的...

weixin_30718391的博客 200

谷歌A2A协议入门指南:附简易Python代码示例

继"关税"之后,当下最热门的词汇当属AI智能体——这种基于人工智能的软件能够执行复杂任务、实现工作流自动化并提升生产效率。但迄今为止,大多数智能体都处于各自为政的状态,难以顺畅协作。就像团队执行重大项目时,成员之间却无法交流!对于技术人员而言,一个可能遇到的典型场景是:假设你需要协调四个不同的AI服务——处理用户查询的Gemini智能体、在向量数据库进行搜索的AI应用、基于Claude的摘要生成器,以及运行专业领域逻辑的Python智能体。

独立开发,substack顶级编辑 793

30天入门 SAP BTP 开发系列之七:动手在 SAP BTP 上开发第一个 ABAP 程序

本教程从理论转向实践,指导如何在SAP BTP上创建首个ABAP程序。首先通过Booster向导在Trial账号中配置ABAP环境,需确保已启用Cloud Foundry并创建Space。成功创建ABAP实例后,使用ABAP Development Tool连接环境:下载服务密钥文件,导入工具获取连接URL,即可建立项目开始编码。教程提供了从环境搭建到开发工具配置的完整流程,帮助ABAP开发者快速上手BTP云开发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1673

Uva 1631 DP locker

Description  给定n位密码锁。每次可以使相邻的1-3位密码锁同时向上或向下转,即,使数字加一或者减一。给定初始状态和目标状态,问至少要转多少次。 Input  初始密码 目标密码 Output 最少的次数  Sample Input  896521 183995 Sample Output  12   这是一道简单的DP题。但是最开始我写出的状态转移方程显然没

Star_Weeper的博客 588

CCF编程培训师资认证(PTA)标准(教学能力T)

随着计算机科学的不断发展,计算机相关技术应用到社会各个行业,越来越多的青少年参加到了计算机程序设计的学习中,这对编程培训教师提出了更高的专业要求和职业要求。CCF开展编程培训师资认证项目(Programming Trainer Accreditation,PTA),旨在建立一个规范的、科学的、权威且有公信力的三方认证。认证考试分编程专业能力(P)和教学能力(T)两部分。本标准根据《CCF编程培训师资认证条例》第十条制定,旨在明确教学能力(T)的测试标准。

lan_in的博客 1708

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

UVA - 1631 Locker(密码锁)(dp---记忆化搜索)

题意:有一个n(n<=1000)位密码锁,每位都是0~9,可以循环旋转。每次可以让1~3个相邻数字同时往上或者往下转一格。输入初始状态和终止状态(长度不超过1000),问最少要转几次。 分析: 1、从左往右依次使各个数字与终止状态相同。 2、dp[cur][x1][x2][x3]表示当前研究数字为第cur位,x1为a[cur],x2为a[cur + 1],x3为a[cur +...

Cherrychan2014的博客 404

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

UVA-1631 Locker(DP)

A password locker with N digits, each digit can be rotated to 0-9 circularly.You can rotate 1-3 consecutive digits up or down in one step. For examples: 567890 → 567901 (by rotating the last 3 digi

lljjccsskk的专栏 456

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Uva 1631】Locker

【Link】: 【Description】 有一个n(n≤1000)位密码锁,每位都是0~9,可以循环旋转。每次可以让1~3个相邻 数字同时往上或者往下转一格。例如,567890->567901(最后3位向上转)。输入初始状态 和终止状态(长度不超过1000),问最少要转几次。例如,111111到222222至少转2次,由 896521到183995则要转...

261

Locker UVA - 1631

题意:有一个n(n&lt;=1000)位密码锁,每位都是0~9,可以循环旋转。每次可以让1~3个相邻数字同时往上或者往下转一格,问最少要转几次; 思路:1.记忆化搜索。d[cur][x][y][z]代表当前第cur位为x,右边两位是y,z并且一定要把第cur位转到正确位置 2.第cur位必须要转tmp位,但是右边相邻的第一位可以有0~tmp位和第cur位一起转,设右边相邻第一位转了i次,右边相...

沐妖的博客 309

UVA 1631 Locker

题目链接:http://acm.hust.edu.cn/vjudge/problem/51192   题意:有一个n位的密码锁,每一位都是0~9,而且可以循环转。每次可以转动连续的1~3位,问把状态A转到状态B至少需要转几次。 思路:dp[i][a][b]表示已经转好了前i位,并且i+1位和i+2位分别为a和b时的最小操作次数。每次我们枚举第i-1位的状态dp[i-1][a][b],

DS-K的博客 585

UVa 1631 Locker

本文研究了密码锁最少旋转步数问题,提出了一种三维动态规划解法。该方法通过设计状态dp[i][x][y]表示处理前i位时第i+1和i+2位的值,考虑向上和向下两种旋转方式,并约束后续旋转次数递减。算法时间复杂度为O(10000n),适用于长度≤1000的密码锁。代码实现验证了该方法的有效性,为解决类似区间操作问题提供了参考。

寂静山林 1144

密码锁 Locker

UVA1631 定义:dp[i][x][y][z]dp[i][x][y][z]dp[i][x][y][z]为达到第iii个数字之前已经解锁,第iii个数为xxx,第i+1i+1i+1个数为yyy,第i+2i+2i+2个数为zzz的状态最少需要转动几下。 详见注释 AC代码: #include<iostream> #include<string> #include<cs...

蒟蒻的博客 2535

Locker UVA - 1631 (dp)

题目链接:点击打开链接 题目大意:给出一个密码锁的当前状态和最终状态,每一次可以将连续的1~3个向上或者向下转动,问最少要转几次 题目思路:很容易知道是dp题但是还是比较难想出状态转移和定义状态的,如果是第一次写这种类型,首先定义状态dp[i][j][k],代表第i位,第i位为j,i+1位为k,还需转动几次, 为什么要这么定义呢,首先我们知道对于每一位来说肯定是要转到和目标状态相同的,那

w571523631的博客 707

【UVa】【DP】1631 Locker

UVa 1631 Locker 题目 ◇题目传送门◆(由于UVa太慢,这里提供一个vjudge的链接) ◇题目传送门(vjudge)◆ 题目大意 有一个NNN位的数字密码锁,每位数字可以在0…90…90\ldots9之间旋转。可以同时旋转一到三个。现给定初始状态和最终状态,求最少旋转次数。 思路 这道题我感觉使用递推来转移似乎很困难,所以我们使用记忆化搜索。 定...

IDDFS 1407

uva1631-Locker(记忆化搜索)

Description A password locker with N digits, each digit can be rotated to 0-9 circularly. You can rotate 1-3 consecutive digits up or down in one step. For examples: 567890 → 567901 (by rotating the l...

你倒是敲代码鸭. 588

UVA - 1631 Locker 记忆化搜索

问题 分析

zpf1998的博客 246
上一篇: Uva 1602 Lattice Animals (网格动物)
mukevinran
博客等级 码龄11年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值