题意:

给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数.

思路:

首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位消除.

dp[ i ][ x ][ y ] 表示前 i 位已经消除为0, 且其后的两位为x,y时, 所需要的最小操作数.

每次可以旋转1~3位, 注意旋转3位时, 第三位和第二位的约束关系.[因此而wa了...]

和Wordstack那道题的"题解版"的思路相同, 用已知的状态去更新未知的状态.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
const int INF = 0x3f3f3f3f;
int dp[MAXN][10][10], bit[MAXN], n;
char s[MAXN], t[MAXN];
int main()
{while(~scanf("%s %s",s,t)){n = strlen(s);for(int i=0;i<n;i++)bit[i+1] = (t[i]+10-s[i]) % 10;bit[n+1] = bit[n+2] = 0;memset(dp,0x3f,sizeof(dp));dp[0][bit[1]][bit[2]] = 0;for(int i=0;i<n;i++)for(int x=0;x<10;x++)for(int y=0;y<10;y++)if(dp[i][x][y]!=INF){dp[i+1][y][bit[i+3]]= min(dp[i+1][y][bit[i+3]],dp[i][x][y] + min(x,10-x));//1for(int j=1;j<=x;j++){dp[i+1][(y+10-j)%10][bit[i+3]]= min(dp[i+1][(y+10-j)%10][bit[i+3]],dp[i][x][y] + x);//2for(int k=1;k<=j;k++)dp[i+1][(y+10-j)%10][(bit[i+3]+10-k)%10]= min(dp[i+1][(y+10-j)%10][(bit[i+3]+10-k)%10],dp[i][x][y] + x);}for(int j=1;j<=10-x;j++){dp[i+1][(y+j)%10][bit[i+3]]= min(dp[i+1][(y+j)%10][bit[i+3]],dp[i][x][y] + 10-x);//2for(int k=1;k<=j;k++)dp[i+1][(y+j)%10][(bit[i+3]+k)%10]= min(dp[i+1][(y+j)%10][(bit[i+3]+k)%10],dp[i][x][y] + 10-x);}}printf("%d\n",dp[n][0][0]);}
}

话说...这是组队以来我做的第一道非水题.....对我而言的非水题吧......

DP还是比较有意思的, 要多多练习~ orz

[HDU 4433]locker[DP]相关推荐

  1. hdu 4433 locker(DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意:就是给你一个序列,相当于一个可以转的那种密码锁的初始状态,0往下转是9,9往上转是0,现在 ...

  2. hdu 4433 locker

    http://acm.hdu.edu.cn/showproblem.php?pid=4433 记忆化搜索+DP ans[x][f][ff]; 表示到a的第x位时 此位加f ,x-1位 加ff 的情况下 ...

  3. ACM练级日志:HDU 4433 Locker

    天津现场赛的一道题,说有两个密码串,每次你可以转第一个串连着的最多三个数,问最少转多少次能把第一串转成第二串. 开始以为是搜索,后来一看n<=1000直接吓尿-- 后来以为是字符串,但是怎么做也 ...

  4. HDU 4433 locker

    很暴力的一个dp,dp[i][j][k] 表示的是第i位时,前i-1位都匹配后,当由前面的状态推出第i位+j,i+1位+k时最少用多少步.注意up和down要分开算.. #include<alg ...

  5. UVA 1631 Locker(HDU 4433)(DP)

    A password locker with N digits, each digit can be rotated to 0-9 circularly. You can rotate 1-3 con ...

  6. HDU 4433 DP

    题意 给1000个数字,每次可以转动1-3连续位,问从一个状态转到另一个状态最少需要多少步. 题解 比赛时候想复杂了,这道题跟BFS没有任何关系.不过还是有很多神牛用记忆化搜索过了.主要就是设计DP状 ...

  7. HDOJ 4433 Locker (数位DP)

    题意,给一个密码锁的初始状态和目标状态,每次可以将连续的 1 - 3 位向上或者向下挪一位,问达到目标状态最少需要多少次. 参考了网上的题解... dp[i][x][y] 表示 在第 i-1 位是 x ...

  8. hdu 1520 树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...

  9. hdu 4035 可能性DP 成都网络游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...

最新文章

  1. Android 自定义View —— Canvas
  2. linux “大脏牛”漏洞分析(CVE-2017-1000405)
  3. ROS学习:创建机器人的urdf
  4. CodeForces - 1330E Drazil Likes Heap(贪心)
  5. 内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的
  6. 【动态规划】农田个数 (ssl 1633)
  7. AUTOSAR从入门到精通100讲(七十九)-AUTOSAR基础篇之DTC
  8. mysql实战33 | 我查这么多数据,会不会把数据库内存打爆?
  9. JSON语法之JSON字符串
  10. st计算机编程语言,ST语法编程基础-ST语言简介
  11. 毕业设计 嵌入式太空游戏机设计与实现
  12. [转]工商银行客户等级怎么划分?工商银行客户等级标准
  13. fms安装教程 linux_[AS3]linux64下安装FMS5.0的方法
  14. 字节跳动测开发实习面试
  15. 在Storyboard中设置borderColor
  16. win7 修改html文件图标,win7系统html文件图标变成空白的解决方法
  17. INO(Initial NFT Offering )
  18. nova3安装android10系统,一招搞定安卓机“久用必卡”顽疾:华为nova3i配备6GB超大运存...
  19. MFC中TeeChart插件绘图
  20. 深入探讨三角函数的命名规范

热门文章

  1. PhotoScan集群设置流程!
  2. srs流媒体服务器性能,srs流媒体服务器 配置
  3. 程序员小灰2020年整理
  4. R中绘制以特定数值为对称的colorbar
  5. python大佬教你爬虫反爬:破解雪碧图反爬
  6. 互联网商业模式设计方案
  7. 【微信小程序控制硬件16 】 安信可 ESP32-S 开发板实现移植腾讯物联开发平台蓝牙 llsync 协议,实现一键蓝牙快速配网+远程控制。(附带源码)
  8. 阿里云短信发送接口调试
  9. 综合布线的主要三大布线系统
  10. mac 惠普 HP136w 打印机 wifi wps 打印乱码 扑克牌图标