[HDU 4433]locker[DP]
题意:
给出密码做的现状和密码, 每次可以移动连续的最多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]相关推荐
- hdu 4433 locker(DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意:就是给你一个序列,相当于一个可以转的那种密码锁的初始状态,0往下转是9,9往上转是0,现在 ...
- hdu 4433 locker
http://acm.hdu.edu.cn/showproblem.php?pid=4433 记忆化搜索+DP ans[x][f][ff]; 表示到a的第x位时 此位加f ,x-1位 加ff 的情况下 ...
- ACM练级日志:HDU 4433 Locker
天津现场赛的一道题,说有两个密码串,每次你可以转第一个串连着的最多三个数,问最少转多少次能把第一串转成第二串. 开始以为是搜索,后来一看n<=1000直接吓尿-- 后来以为是字符串,但是怎么做也 ...
- HDU 4433 locker
很暴力的一个dp,dp[i][j][k] 表示的是第i位时,前i-1位都匹配后,当由前面的状态推出第i位+j,i+1位+k时最少用多少步.注意up和down要分开算.. #include<alg ...
- 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 ...
- HDU 4433 DP
题意 给1000个数字,每次可以转动1-3连续位,问从一个状态转到另一个状态最少需要多少步. 题解 比赛时候想复杂了,这道题跟BFS没有任何关系.不过还是有很多神牛用记忆化搜索过了.主要就是设计DP状 ...
- HDOJ 4433 Locker (数位DP)
题意,给一个密码锁的初始状态和目标状态,每次可以将连续的 1 - 3 位向上或者向下挪一位,问达到目标状态最少需要多少次. 参考了网上的题解... dp[i][x][y] 表示 在第 i-1 位是 x ...
- hdu 1520 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...
- hdu 4035 可能性DP 成都网络游戏
http://acm.hdu.edu.cn/showproblem.php?pid=4035 获得: 1.首先推断是不是树.事实上,所有的感觉身影,既看边数==算-1是不成立 2.有时候,我告诉孩子来 ...
最新文章
- Android 自定义View —— Canvas
- linux “大脏牛”漏洞分析(CVE-2017-1000405)
- ROS学习:创建机器人的urdf
- CodeForces - 1330E Drazil Likes Heap(贪心)
- 内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的
- 【动态规划】农田个数 (ssl 1633)
- AUTOSAR从入门到精通100讲(七十九)-AUTOSAR基础篇之DTC
- mysql实战33 | 我查这么多数据,会不会把数据库内存打爆?
- JSON语法之JSON字符串
- st计算机编程语言,ST语法编程基础-ST语言简介
- 毕业设计 嵌入式太空游戏机设计与实现
- [转]工商银行客户等级怎么划分?工商银行客户等级标准
- fms安装教程 linux_[AS3]linux64下安装FMS5.0的方法
- 字节跳动测开发实习面试
- 在Storyboard中设置borderColor
- win7 修改html文件图标,win7系统html文件图标变成空白的解决方法
- INO(Initial NFT Offering )
- nova3安装android10系统,一招搞定安卓机“久用必卡”顽疾:华为nova3i配备6GB超大运存...
- MFC中TeeChart插件绘图
- 深入探讨三角函数的命名规范