uva1631 Locker 记忆化搜索

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

自己想用d[I][j],  然后不会了。。

然后看别人的题解,感觉好巧妙。。

他这里之所以枚举是因为  1000*10*10*10   用了记忆化搜索后并不会TLE ,

可能自己连暴力, 模拟的这一块都还么有搞清楚。。


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<stack>
#include<cmath>
#include<map>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
#define INF 1e9
#define bug1 cout<<"bug1"<<endl;
#define bug2 cout<<"bug2"<<endl;
#define bug3 cout<<"bug3"<<endl;
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
const int maxn=1005;
char a[maxn],b[maxn];
int s[maxn],t[maxn];
int len;
int d[maxn][12][12][12];
int dp(int cur,int x,int y,int z){
    if(cur>=len)return 0;
    int &ans=d[cur][x][y][z];
    if(ans!=-1)return ans;
    ans=INF;
    int tmp;
    if(x<=t[cur])tmp=t[cur]-x;
    else tmp=t[cur]+10-x;
    for(int i=0;i<=tmp;++i){
        for(int j=0;j<=i;++j){
            ans=min(ans,dp(cur+1,(y+i)%10,(z+j)%10,s[cur+3])+tmp);
        }
    }
    if(x>=t[cur])tmp=x-t[cur];
    else tmp=x+10-t[cur];
    for(int i=0;i<=tmp;++i){
        for(int j=0;j<=i;++j){
            ans=min(ans,dp(cur+1,(y-i+10)%10,(z-j+10)%10,s[cur+3])+tmp);
        }
    }
    return ans;
}
int main(){
    while(~scanf("%s%s",&a,&b)){
        mem(d,-1);
        len=strlen(b);
        for(int i=0;i<len;++i){
            s[i]=a[i]-'0';
            t[i]=b[i]-'0';
        }
        s[len]=s[len+1]=t[len]=t[len+1]=0;
        pf("%d\n",dp(0,s[0],s[1],s[2]));
    }
}


【DP 训练】Locker, Tianjin 2012, UVa1631 #include using namespace std; #define maxn 1010 int len;char s1[maxn],s2[maxn]; int dp[maxn][15][15],a[maxn],b[maxn]; //dp(i,x,y)表示翻到i位第i+1位为x,第i+2位为y的最小步数,枚举上翻状态,找到正翻和倒翻的最小值。 int main() { ios::sync_ 阅读详情

相关推荐

给jetson nano 安装AX200网卡驱动

几经波折,因为在网上看到的基本都是amd版本而非arm版,然后最终选定V5.5是因为更新的几个版本的arm版本是false的(在https://kernel.ubuntu.com/~kernel-ppa/mainline/处选择版本时,得看在arm64上是false还是build succeeded,之前没经验呀刚刚才顿悟的) 1,参考文章https://blog.youkuaiyun.com/MIRANA0/article/details/106696334 学到了得下载如下四个: wget https://k

发嘎嘎的博客 2345

Uva 1631 DP locker

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

Star_Weeper的博客 589

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

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

PMBus协议解析:基于I2C的电源管理实战与TMS320F28003x驱动开发

在嵌入式系统与服务器电源设计中,数字电源管理总线是实现高效、可靠电源监控与控制的关键技术。PMBus协议基于广泛应用的I2C总线物理层,通过定义标准化的命令集、数据格式与时序规范,为多路电源的电压电流监控、动态调整及故障处理提供了高效解决方案。其技术价值在于通过硬件自动处理协议解析、时钟拉伸与中断,显著降低软件复杂度,使开发者能聚焦于电源环路设计等核心逻辑。该协议广泛应用于服务器、通信基站及高性能计算板卡等场景,通过引入数据包错误检查、专用告警线等机制,确保了电源管理的可靠性。本文以TI TMS320F28

weixin_29189377的博客 374

2025年从零开始:构建你的首个ComfyUI工作流-ComfyUI入门教程

然而,由于它拥有众多的插件节点,以及较为复杂的操作流程,学习起来相对困难。以前面搭建的文生图工作流为例,首先点击功能区的【保存】,然后你的浏览器会出来一个弹窗,你可以进行文件命名,点击确定后浏览器会下载该文件,也就是带“json”后缀的文件,这样我们的工作流就打包成一份文件了。思考一下前面说的,节点是不是需要下载安装才能使用,而我们复用别人的工作流,他用的节点你不一定下载了,因为目前有600多个节点,你不可能全部下载了吧,所以我们日后使用别人的工作流,你会经常出现这样的问题。

weixin_59486588的博客 1455

uva1631

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

timeruler的博客 433

AD22等长布线规则

本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。

whm128的博客 1557

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

华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

m0_73659489的博客 6872

ESP32设备驱动-VCNL4040趋近传感器

VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片中。

视觉与物联智能 940

UVa-1631 密码锁 (记忆化搜索)

题目链接:https://vjudge.net/contest/232314#problem/L 给定两个数字字符串,每次操作只能将相邻的1-3位数字向上或向下旋转1位,问从第一个字符串到第二个字符串最少需要多少步。 很经典的记忆化搜索问题,用dp[i][a][b][c]表示前i-1位已经旋转好了,第i位为a,第i+1位为吧,第i+2位为c时,将这三位旋转好的最小移动次数。那么首先,第i位旋转...

Q755100802的博客 410

【NLP】第十章:位置编码Positional Encoding

前面讲RNN时一般都会有一个ht的输出,这个输出就是样本与样本之间的信息,而且RNN是时序循环的,所以RNN本身的结构,在物理上,就自带词的前后顺序信息的。比如词never,不管never本身的词向量是什么,只要你在序列中排第一个位置,你的位置向量就是[0,1,01],你排第三个位置,你的位置向量就是[0.9,-0,4,0.2,1.0]。也所以,你可以理解为:embedding后的词嵌入,PE按照每个样本在sequence中的位置,把embedding后的词嵌入给扭转后,才送入attention的。

因为热爱所以坚持 1918

UVA - 1631 Locker 记忆化搜索

题意:给定两个密码串,每次可以让1~3个相邻的密码向上或者向下滚动,每个密码是0−90-9 ,问最少需要多少次滚动可以让原串成为目标串?思路:假设当前要让第i位密码还原,我们可以同时转动[i,i+1,i+2],[i,i+1],[i][i,i+1,i+2], [i,i+1],[i],不同的转动方式会影响后序的转动,那么可以枚举(i,i+1,i+2)(i,i+1,i+2)三个密码的转动情况来进行记忆化搜

flyawayl的博客 900

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

UVA - 1631 Locker 记忆化搜索

问题 分析

zpf1998的博客 246

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

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

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(记忆化搜索)

题目链接 1.首先如果只转动一位,那么不难发现每一位是互不影响的。而本题可以同时最多转动三位。那么我们不难发现,因为第二位第三位什么决策最优是未知的,但是当前位最少的转动次数是一定的(要么向上要么向下)。在将第一位转动到正确位置的过程中,第二位第三位可以转也可以不转,那么我们需要枚举所有的情况进行状态转移 2.然后观察上图,原位置设为aaa,目标未知设为bbb,因为二者的大小关系是不确定的,但是一共只有十位,因此我们无需分类讨论,只需使用取模的技巧: 若向上转,则需要u=(b[cur]+10−x)u=

Happig的博客 342

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

【UVa】【DP】1631 Locker

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

IDDFS 1407

uva 1631

1631 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: 567890 → 567901 (by rotating t...

weixin_30556161的博客 93

uva1631(DP记忆化搜索)

/* translation: 有一串密码锁,每次能够让相邻的1~3位数字向上或者向下旋转一格。给出目标状态和起始状态,问最少需要旋转几次? solution: 记忆化搜索dp 令dp(int pos, int a, int b, int c)其中pos是当前的位置,a,b,c分别是pos,pos+1,pos+2上的数字。此时 pos前面的位置都已经旋转完毕,不需要再次旋转了。那么就可以求

林伏案的博客 1104

uva 1631 locker

题目大意:给出两串长度为n(n 求源串最少多少步能变成目标串。 一看就知道是dp的题目,这题状态不难想d(i,x,y)表示转好第i个数且第i+1个数为x,i+2个为y 时候所用的最少次数直接枚举 i+1个数和i+2个数分别转动的次数就好了 另一个坑在于,i+1,i+2溢出怎么处理,比较平庸的是单独讨论。。。 在数组后面加了两个0,这样不仅代码长度缩短,而且最终状态也是固定的 //

chenhongwei6447的博客 1168

Locker UVA - 1631 (dp)

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

w571523631的博客 707

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
上一篇: poj2502 关于输入部分的坑。。
下一篇: uva10163 Storage Keepers (未能自己敲出来)
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值