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 digits up)
000000 → 000900 (by rotating the 4th digit down)
Given the current state and the secret password, what is the minimum amount of steps you have
to rotate the locker in order to get from current state to the secret password?

Input
Multiple (less than 50) cases, process to EOF.
For each case, two strings with equal length (≤ 1000) consists of only digits are given, representing
the current state and the secret password, respectively.

Output
For each case, output one integer, the minimum amount of steps from the current state to the secret
password.

Sample Input
111111 222222
896521 183995

Sample Output
2
12

题意:给两个字符串A,B,每一步可以将连续的1-3个数字上调或下调一位,问将A变成B最少需要几步。

思路:调动一位只能对它的后两位有影响,从第一位开始调,第一位只能通过它自己的变化才能变成目标数字。设dp[i][j][k]表示使i位置变为目标数字,且i+1位置变为数字j,且i+2位置变为数字k,所需要的最少步数。需要注意的一个坑数据就是,000 --> 789,只需要3步,也就是说,变第i位需要固定的x步,i+1可以只变y(y<=x)步,i+2可以只变z(z<=y)步。然后变i位的时候有上调和下调两种方式。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
#include <stack>
using namespace std;char s1[1005],s2[1005];
int a[1010],b[1010];
int n;
int dp[1005][10][10];int main()
{while(scanf("%s%s",s1,s2)!=EOF){n=(int)strlen(s1);for(int i=1;i<=n;i++){a[i]=s1[i-1]-'0';b[i]=s2[i-1]-'0';}memset(dp,0x3f3f3f3f,sizeof(dp));a[n+1]=b[n+1]=0;a[n+2]=b[n+2]=0;dp[0][a[1]][a[2]]=0;for(int i=1;i<=n;i++){for(int j=0;j<10;j++){for(int k=0;k<10;k++){if(dp[i-1][j][k]!=0x3f3f3f3f){int x;if(b[i]>=j) x=b[i]-j;     //将第i位上调x步else x=10+b[i]-j;dp[i][k][a[i+2]]=min(dp[i][k][a[i+2]],dp[i-1][j][k]+abs(x));for(int l=0;l<=x;l++){int c=(k+l+20)%10;dp[i][c][a[i+2]]=min(dp[i][c][a[i+2]],dp[i-1][j][k]+abs(x));for(int p=0;p<=l;p++){int d=(a[i+2]+p+20)%10;dp[i][c][d]=min(dp[i][c][d],dp[i-1][j][k]+abs(x));}}//或者下调x步if(b[i]<j) x=j-b[i];else x=10+j-b[i];dp[i][k][a[i+2]]=min(dp[i][k][a[i+2]],dp[i-1][j][k]+abs(x));for(int l=0;l<=x;l++){int c=(k-l+20)%10;dp[i][c][a[i+2]]=min(dp[i][c][a[i+2]],dp[i-1][j][k]+abs(x));for(int p=0;p<=l;p++){int d=(a[i+2]-p+20)%10;dp[i][c][d]=min(dp[i][c][d],dp[i-1][j][k]+abs(x));}}}}}}int ans=0x3f3f3f3f;for(int i=0;i<10;i++){for(int j=0;j<10;j++){ans=min(ans,dp[n][i][j]);}}cout<<ans<<endl;}return 0;
}

UVA 1631 Locker(HDU 4433)(DP)相关推荐

  1. Travel(HDU 4284状压dp)

    题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...

  2. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  3. 【HDU - 2717】【POJ - 3278】Catch That Cow (经典bfs,类似dp)

    题干: Farmer John has been informed of the location of a fugitive cow and wants to catch her immediate ...

  4. 黑白树(牛客网+树形dp)

    链接:https://ac.nowcoder.com/acm/problem/13249 来源:牛客网 题目描述 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值 ...

  5. uva 1631——Locker

    题意:有一个n位的密码锁,每位都是0--9可以循环旋转,每次可以往上或者往下旋转一下,然后给定初始状态和末状态求最小旋转步数. 思路:递推,dp(i,x,y)表示翻到i位第i+1位为x,第i+2位为y ...

  6. 【POJ - 1661】Help Jimmy(记忆化搜索,dp)

    题干: Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开 ...

  7. LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 状态压缩DP 265 / 3871, 前6.85% 前3题题解: LeetCode 5649. 解码异或后的数组(位运算) LeetCode ...

  8. hihoCoder #1162 : 骨牌覆盖问题·三 (矩阵快速幂,DP)

    题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k<8,n<100000001) 思路: 由于k是比较小,但是又不那么小,可以专门构造这样的一个矩阵M,使得只要我们有一 ...

  9. 最短Hamilton路径(哈密顿图,状压dp)

    题目: 给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次. ...

  10. 道路覆盖 (二分答案+状压DP)

    Description: Tar 把一段凹凸不平的路分成了高度不同的 N 段(每一段相同高度),并用 H[i] 表示第 i 段高度.现在 Tar 一共有 n 种泥土可用,它们都能覆盖给定的连续的 k ...

最新文章

  1. csvtk:高效命令行版极简dplyr
  2. 前端小笔记:左定宽,右随意
  3. 入门4:PHP 语法基础1
  4. 《研磨设计模式》chap18 状态模式state(2)模式介绍
  5. C. Barcode dp
  6. 服务器之后加码存储,浪潮信息重磅发布新一代 G6 存储平台
  7. 鸿蒙 OS 2.0 来了!值得开发者关注的是什么?
  8. C# 解析Excel中的那些事儿
  9. android logo:内核、android开机动画
  10. [2018.04.29 T3] 矩阵
  11. 30种EMC标准电路分享,再不收藏就晚了!
  12. 中国土壤修复行业十四五专项调研及投资战略规划报告2022-2027年新版
  13. 记录:pycharm的强大之处之两个文件代码的比对
  14. This dependency was not found: * common/stylus/index.styl in ./src/main.js
  15. 考研英语 长难句训练day12
  16. react-native Animated简单动画制作
  17. 构建根文件系统(一)
  18. wald检验_Stata: 面板 Granger 因果检验
  19. 中国智慧家庭市场运营模式分析及发展趋势研究报告2022-2027年版
  20. 通俗理解 三次握手四次挥手(老友依恋式)

热门文章

  1. 【glib】Key-value文件解析器
  2. 多模态预训练模型学习
  3. 【案例】米柚导航条实现
  4. 【DBN分类】基于matlab麻雀算法优化深度置信网络SSA-DBN数据分类【含Matlab源码 2318期】
  5. opencv 双目摄像头标定
  6. H5在微信端锁定背景滚动
  7. 优步外卖(Ubereat)接口数据结构处理【仅供参考】
  8. 集装箱储能系统本地服务器,0.5MW-1MWh集装箱储能系统方案
  9. appserver安装配置_Appserver-服务器配置,目录结构和线程
  10. freertos 怎么做超时处理_新公司开办费会计处理怎么做?如何进行税务处理?