题目链接

去年区域赛的题目,早就看过题目了,又是过了好久了。。。

这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂。。。

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,其他的1000位的预处理,用spfa搞的。

预处理写的很长。。

 #include <cstring>
#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 10000000
char s1[],s2[];
int dp[][];
int mp[][];
int dis[];
int in[];
int p[][];
int n1[],n2[];
int a[] = {,,,,,,-,,,-,,-};
int b[] = {,,,,,,,-,,-,-,-};
int c[] = {,,,,,,,,-,,-,-};
void spfa(int key)
{
int x,y,z,i,ax,ay,az,u,v;
queue <int> que;
for(i = ;i < ;i ++)
{
dis[i] = INF;
in[i] = ;
}
in[key] = ;
dis[key] = ;
que.push(key);
while(!que.empty())
{
u = que.front();
in[u] = ;
que.pop();
x = (u/)%;
y = (u/)%;
z = u%;
for(i = ;i < ;i ++)
{
ax = (x+a[i]+)%;
ay = (y+b[i]+)%;
az = (z+c[i]+)%;
v = ax*+ay*+az;
if(dis[v] > dis[u] + )
{
if(!in[v])
{
in[v] = ;
que.push(v);
}
dis[v] = dis[u] + ;
}
}
}
for(i = ;i < ;i ++)
mp[key][i] = dis[i];
return ;
}
int main()
{
int i,j,len,x,y,z,k,temp;
for(i = ;i < ;i ++)
{
for(j = ;j < ;j ++)
p[i][j] = INF;
p[i][i] = ;
}
for(i = ;i < ;i ++)
{
x = (i/)%;
y = i%;
p[x][(y+)%] = ;
p[(y+)%][x] = ;
p[(x+)%][y] = ;
p[y][(x+)%] = ;
p[(x+)%][(y+)%] = ;
p[(y+)%][(x+)%] = ;
}
for(i = ;i < ;i ++)
{
for(j = ;j < ;j ++)
{
for(k = ;k < ;k ++)
{
if(p[j][k] > p[j][i] + p[i][k])
p[j][k] = p[j][i] + p[i][k];
}
}
}
for(i = ;i < ;i ++)
{
spfa(i);
}
while(scanf("%s%s",s1,s2)!=EOF)
{
len = strlen(s1);
for(i = ;i <= len;i ++)
{
n1[i] = s1[i-] - '';
n2[i] = s2[i-] - '';
}
for(i = ;i <= len;i ++)
{
for(j = ;j < ;j ++)
dp[i][j] = INF;
}
n1[len+] = n2[len+] = ;
n1[len+] = n2[len+] = ;
temp = n1[] * + n1[];
for(i = ;i < ;i ++)
{
dp[][i] = p[temp][i];
}
for(i = ;i < len;i ++)
{
z = n1[i+];
for(j = ;j < ;j ++)
{
x = (j/)%;
y = j%;
for(k = ;k < ;k ++)
{
if(dp[i+][k] > dp[i][j] + mp[j*+z][n2[i+]*+k])
dp[i+][k] = dp[i][j] + mp[j*+z][n2[i+]*+k];
}
}
}
printf("%d\n",dp[len][]);
}
return ;
}

HDU 4433 locker(SPFA+DP)的更多相关文章

  1. 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 ...

  2. HDU 3499 Flight spfa+dp

    Flight Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Subm ...

  3. 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就不敢敲了呢 ...

  4. [HDU 4433]locker[DP]

    题意: 给出密码做的现状和密码, 每次可以移动连续的最多3列, 向上或向下, 求将密码调出来所需要的最少步数. 思路: 首先应看出,恢复的过程中, 调每一位的时间顺序是不影响的, 不妨就从左到右一位位 ...

  5. HDU 4433 locker 2012 Asia Tianjin Regional Contest 减少国家DP

    意甲冠军:给定的长度可达1000数的顺序,图像password像锁.可以上下滑动,同时会0-9周期. 每个操作.最多三个数字连续操作.现在给出的起始序列和靶序列,获得操作的最小数量,从起始序列与靶序列 ...

  6. HDU 4433 locker

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433 这是一道2012年ACM天津赛区现场赛的题目,大意是给出两串数字,求用最少的转换次数将一串(A) ...

  7. 【BZOJ1003】1003: [ZJOI2006]物流运输trans SPFA+DP

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...

  8. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  9. BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP

    题意:链接 方法:SPFA+DP 解析:挺好的题目.因为数据范围较小所以用这样的方式能够搞,只是也是挺不好想的. 我们定义cost(i,j)表示从第i天走到第j天运用同一种方式的最小花费,然后因为数据 ...

随机推荐

  1. C 和 C++ 混合代码 cmath编译出错

    最近在网上下载了 Triangle 库,准备在程序中调用来三角化生成网格,但出现了很多错误,如下: 1>  triangle.c1>d:\program files\visualstudi ...

  2. How to use the Visual Studio

    推荐一个提供VS配色方案的一个网站:StudioStyles,域名和网站同名:http://studiostyl.es/ 2. 整行剪切:Ctrl + X.光标不要选中任何文字,然后按这个快捷键就可以 ...

  3. eclipse中快捷键

    转为大写  ctrl+shift+x 转为小写  ctrl+shift+y 根据类名快速找到类文件 ctrl+shift+r 返回上一级 ALT  +  <- 速定位到某一行 ctrl+L

  4. app分享时判断手机是否已安装微信或QQ客户端

    /** * 判断 用户是否安装微信客户端 */ public static boolean isWeixinAvilible(Context context) { final PackageManag ...

  5. Java的静态导入

    静态导入作用是可以适当减少代码量,但实际上减少得很有限,实际应用中也用的不多,但是作为Java的特性,我们应该适当了解: //静态导入方法或者常量 import static java.lang.Sy ...

  6. mysql replace into用法与坑

    需要主键一致 PRIMARY KEY (id) PRIMARY KEY (id, ts) 坑: https://blog.xupeng.me/2013/10/11/mysql-replace-into ...

  7. H5危险的文件上传对话框

    文件对话框 文件上传对话框是一直以来就存在的网页控件. 到了 HTML5 时代,增加了更多的功能,例如支持文件多选.Chrome 甚至还支持「上传文件夹」这一私有特征: <input type= ...

  8. Codeforces Round #375 (Div. 2) - D

    题目链接:http://codeforces.com/contest/723/problem/D 题意:给定n*m小大的字符矩阵.'*'表示陆地,'.'表示水域.然后湖的定义是:如果水域完全被陆地包围 ...

  9. HTTP基础09--web(1)

    Web 应用 通过 Web 提供功能的 Web 应用 原本应用 HTTP 协议的 Web 的机制就是对客户端发来的请求,返回事前准备好的内容.可随着 Web 越来越普及,仅靠这样的做法已不足以应对所有 ...

  10. iOS10 UI教程视图的绘制与视图控制器和视图

    iOS10 UI教程视图的绘制与视图控制器和视图 iOS10 UI视图的绘制 iOS10 UI教程视图的绘制与视图控制器和视图,在iOS中,有很多的绘图应用.这些应用大多是在UIView上进行绘制的. ...