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,如果超 ...
随机推荐
- html5 语音搜索
开始以为是接口什么的,原来这就是语言搜索. 只需要在input加上x-webkit-speech <input type="text" class="text&qu ...
- ArcGIS Runtime SDK for Android 10.2.5新开发平台安装配置指南
ArcGIS Runtime SDK for Android 10.2.5版本在年前发布,其中一个重大的变化是:新版本使用了新的开发环境,在10.2.5版本中Esri使用了官方提供的新的Android ...
- IOS系统中使用zepto的live事件绑定不了的一个办法
IOS系统中使用zepto的live事件绑定不了的一个办法: 对事件对象添加样式:cursor:pointer
- adobeMediaServer
参考地址: http://www.piis.cn/news/new519.asp http://www.cuplayer.com/player/PlayerCode/RTMP/2012/0918427 ...
- php pod
//PDO:数据访问抽象层 //dsn:数据源: //带有事务功能: $dsn = "mysql:host=localhost;dbname=mydb"; ——建立数据源 //造p ...
- weblogic11g 节点管理器 nodemanager
Weblogic 节点管理器 nodemanager 一.Weblogic 规划 : Server名称 端口 ip 备注 xyyadmin 7001 10.10.54.74 管理server ap ...
- MTK6515 android打版软件配置(DrvGen.exe 使用)
1 一.配置GPIO 2 二.配置emmc 3 三.配置LCM 3.1 1.增加LCM驱动文件 3.2 2.配置驱动文件 3.3 3.配置背光 4 四.配置touch panel 4.1 1.通过dc ...
- HDU 4658 Integer Partition(整数拆分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4658 题意:给出n.k.求n的拆分方案数.要求拆分中每个数不超过k. i64 f[N]; void i ...
- HibernateTools实现pojo类 数据库schma mapping映射的相互转换
核心 利用HibernateTools,从POJO类,Mapping映射文件,数据库表有其中的一项,就能生成其他两项. 概述 在使用Hibernate开发系统持久层时,按照一般开发流程 1.分析业务 ...
- Hibernate 的<generator class="native"></generator>的不同属性含义
1) assigned主键由外部程序负责生成,无需Hibernate参与. 2) hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3) seqhilo与hil ...