hdu4433 locker】的更多相关文章

暴力dp.. dp[i][j][k] 表示 前i位完全匹配 j 表示i+1位 k表示i+2位 枚举j k #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<string> using namespace std; char s1[1005],s2[1005]; int dp[1005][1…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意: 给两个长度相等的数字串s1,s2.每次操作可以把连续的最多三位都+1或-1,如果超过9则变成0,如果小于0则变成9.问从s1到s2最少的步数. 解题思路: 每一位移动正确最多5位,如果一位一位的移动最多需要1000*5=5000 . 长度有1000太大,不能直接用BFS. 因为每次改变最多只影响3位,前面的i-3位不改变,所以可以设dp[i][j][k]表示处理到了第i位,且最后…
任意门:http://codeforces.com/gym/101954/problem/E E. Locker Room time limit per test 2.0 s memory limit per test 256 MB input standard input output standard output There are several strange rooms in Binary Casino and one of them is a locker room. You ha…
Problem 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 last 3 digits up)000000 -> 000900 (by rotati…
4576 njczy2010 C Accepted 860 KB 140 ms G++ 2063 B 2014-10-16 09:51:19 哎,为啥1000*100*100的复杂度的dp就不敢敲了呢,,,真是2 涉及到可能有后效性的时候,一维就不行了,要扩维.本题,一个状态的变化会影响后两个,所以要用三维. lockerTime Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota…
SPOJ - LOCKERhttps://vjudge.net/problem/45908/origin暴力枚举2-102 23 34 2 25 2 36 3 37 2 2 38 2 3 39 3 3 3发现是在没有1的情况下,3尽可能的多,其他用2补.大于等于10的,可以由10以内的凑出来,就可以递推出去了 #include <iostream> #include <cstdio> #define p(a) putchar(a) #define mod 1000000007 #d…
题目链接 去年区域赛的题目,早就看过题目了,又是过了好久了... 这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂... dp[i][j]表示前i位相同,i之后两位为j的最小转动次数. 例如dp[i][x*10+y]  i+3位 为z(初始数字),x y z 转化为 ax ay az,ax肯定是第二个串的第i位,后两位随便就可以. 只要 预处理 xyz 转化为axayaz的情况,就行了.dp[0]初始化,100位直接Floyd,其他…
题意: 有2个数字串,每次可以变化1-3位(每位+1或-1(0-9,9-0)可循环),求由1串变到2串的最小用的次数. 分析: dp[i][num]表示变到第i位时最后两位组成的数是num时最小次数(因为dp[i-1][num1],num1肯定是i位数的i-1,i-2位数,dp[i][num]=min(dp[i-1][num1]+cost[p][q])cost[p][q]表示(p,q后三位数字最小转化次数,可以预处理,要细心) #include <map> #include <set&g…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433 这是一道2012年ACM天津赛区现场赛的题目,大意是给出两串数字,求用最少的转换次数将一串(A)变为另一串(B).转换规则是:可以将连续的1到3位数字都加一或者减一(0-9的数字是循环的,0减一变9,9加一变0) 本题的数字串的长度最大有1000,光用搜索是不行的了,正解是DP DP[i][j][k]表示前i-2个数字与目的串的相同,且第i-1位为j , 第i 位为k 的最小变换次数. 那么状…
题意: 给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数. 思路: 首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位消除. dp[ i ][ x ][ y ] 表示前 i 位已经消除为0, 且其后的两位为x,y时, 所需要的最小操作数. 每次可以旋转1~3位, 注意旋转3位时, 第三位和第二位的约束关系.[因此而wa了...] 和Wordstack那道题的"题解版"的思路相同, 用已知的状态去更新未知的…