Locker
题意:
有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>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
int dp[][],cost[][],n;
char a[],b[];
void init(){
for(int i=;i<;++i)
for(int j=;j<;++j){
if(i==j)continue;
if(cost[i][j]!=)continue;
int p1=i/;
int p2=(i/)%;
int p3=i%;
int q1=j/;
int q2=(j/)%;
int q3=j%;
int u1,u2,u3;
if(p1<q1){
u1=q1-p1;
p2=(p2+u1)%;
p3=(p3+u1)%;
}
else{
u1=p1-q1;
p2=(p2-u1+)%;
p3=(p3-u1+)%;
}
if(p2<q2){
u2=q2-p2;
p3=(p3+u2)%;
}
else{
u2=p2-q2;
p3=(p3-u2+)%;
}
u3=p3>q3?p3-q3:q3-p3;
u1=u1>-u1?-u1:u1;
u2=u2>-u2?-u2:u2;
u3=u3>-u3?-u3:u3;
cost[i][j]=cost[j][i]=u1+u2+u3;
}
}
void solve(){
for(int i=;i<;++i){
int id=a[]-'';
int tmp=i>id?i-id:id-i;
dp[][i]=(tmp>-tmp)?-tmp:tmp;
}
for(int i=;i<;++i){
int minv=INF;
for(int j=;j<;++j){
int q=a[]-''+j*;
minv=min(minv,dp[][j]+cost[i][q]);
}
dp[][i]=minv;
}
int now=;
for(int i=;i<=n;++i){
now^=;
for(int j=;j<;++j)
{
int minv=INF;
for(int k=;k<;++k){
int p=(b[i-]-'')*+j;
int q=*k+(a[i]-'');
minv=min(minv,dp[now^][k]+cost[p][q]);
}
dp[now][j]=minv;
}
}
int num=*(b[n-]-'')+(b[n]-'');
printf("%d\n",dp[now][num]);
}
int main()
{
init();
while(scanf("%s%s",a+,b+)==){
n=strlen(a+);
if(n==)
{
int m=a[]>b[]?a[]-b[]:b[]-a[];
printf("%d\n",m>-m?-m:m);
}
else{
solve();
}
}
return ;
}
Locker的更多相关文章
- 2018 - 2019 CTU Open Contest E. Locker Room 【后缀数组】
任意门:http://codeforces.com/gym/101954/problem/E E. Locker Room time limit per test 2.0 s memory limit ...
- HDU 4433 locker(DP)(2012 Asia Tianjin Regional Contest)
Problem Description A password locker with N digits, each digit can be rotated to 0-9 circularly.You ...
- HDU 4433 locker(12年天津,DP)
4576 njczy2010 C Accepted 860 KB 140 ms G++ 2063 B 2014-10-16 09:51:19 哎,为啥1000*100*100的复杂度的dp就不敢敲了呢 ...
- SPOJ - LOCKER
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 ...
- HDU 4433 locker(SPFA+DP)
题目链接 去年区域赛的题目,早就看过题目了,又是过了好久了... 这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂... dp[i][j ...
- HDU 4433 locker
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433 这是一道2012年ACM天津赛区现场赛的题目,大意是给出两串数字,求用最少的转换次数将一串(A) ...
- [HDU 4433]locker[DP]
题意: 给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数. 思路: 首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位 ...
- hdu4433 locker
暴力dp.. dp[i][j][k] 表示 前i位完全匹配 j 表示i+1位 k表示i+2位 枚举j k #include<iostream> #include<cstdio> ...
- dp hdu-4433 locker
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4433 题目大意: 给两个长度相等的数字串s1,s2.每次操作可以把连续的最多三位都+1或-1,如果超 ...
随机推荐
- vmware通过vmnet8共享本地网络
转载于:http://zhaolongchn.blog.163.com/blog/static/19065850420122595117886/ 1,首先将真实电脑的虚拟网卡VMnet8启用 2,然后 ...
- 如何在github上展示作品——为你的项目生成一个快速访问的网址如(DaisyWang88.github.io)
(这里值针对Windos系统的,因为本人用的是Window系统,暂时没有条件在其他平台上测试) 1.创建命名为 <userName>.github.io的仓库. 这里的u ...
- hadoop安装配置——伪分布模式
1. 安装 这里以安装hadoop-0.20.2为例 先安装java,参考这个 去着下载hadoop 解压 2. 配置 修改环境变量 vim ~/.bashrc export HADOOP_HOME= ...
- Mac显示和隐藏文件的命令
打开命令行输入即可,不过要重启Finder才能看到效果 显示: defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏: def ...
- JavaScript一些关键概念
垃圾回收:http://www.cnblogs.com/dolphinX/p/3348468.html 引用计数和标记清除 作用链和闭包:http://www.cnblogs.com/dolphinX ...
- 监听Activity进入后台(最小化),并根据时间判断是否超时,此解决办法可用于超时重登陆
通过重写一个继承自Activity的基类中的onUserLeaveHint()方法,当用户按Home键等操作使程序进入后台时即开始计时,当用户使程序恢复为前台显示时执行onResume()方法,在其中 ...
- 【verilog】fdisplay中如何保存有符号形式
2014-01-02 10:10:29 参考:http://xilinx.eetop.cn/viewthread-275584 使用系统任务$signed,如 $fdisplay(fp, " ...
- Mac下无法拷贝文件到移动硬盘
Mac下无法拷贝文件到移动硬盘? 是移动硬盘的文件格式的问题. Mac系统无法识别 NTFS 格式的文件. 将移动硬盘格式化为 exFAT 格式的. 别担心,exFAT 格式的硬盘在Windows下也 ...
- How to install cacti With Nginx
转载于:https://github.com/blackyboy/Ubuntu-Linux-Stuffs/blob/master/How-to-install-Cacti-Monitoring-Ser ...
- BZOJ 1016 星球大战starwar(逆向-并查集)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1015 题意:给出一个图.每次删掉一个点,求删掉之后连通块个数. 思路:正着做不好做,我们 ...