先贴一波题面

1054: [HAOI2008]移动玩具

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2288  Solved: 1270

Description

  在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动
时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移
动到某人心中的目标状态。

Input

  前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空
行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。

Output

  一个整数,所需要的最少移动次数。

Sample Input

1111
0000
1110
0010

1010
0101
1010
0101

Sample Output

4
这题乍一看感觉怪怪的,后来一看数据规模固定为16位,状压DP可过
我所选择的策略是BFS,从开始状态枚举可能的转移状态,更新状态并入队
袋马如下:
 #include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> int dp[<<];
int origin;
int goal;
bool inQueue[<<]; void Initialize();
void BFS(int); int main(){
Initialize();
BFS(origin);
printf("%d\n",dp[goal]);
return ;
} void BFS(int origin){
int top,target;
std::queue<int> q;
q.push(origin);
dp[origin]=;
while(!q.empty()){
top=q.front();
q.pop();
for(int i=;i<;i++){
if((top&(<<i))==)
continue;
if(i>=&&(top&(<<(i-)))==){
target=(top^(<<i))^(<<(i-));
if(dp[target]>dp[top]+){
dp[target]=dp[top]+;
if(!inQueue[target]){
q.push(target);
inQueue[target]=true;
}
}
}
if(i<=&&(top&(<<(i+)))==){
target=(top^(<<i))^(<<(i+));
if(dp[target]>dp[top]+){
dp[target]=dp[top]+;
if(!inQueue[target]){
q.push(target);
inQueue[target]=true;
}
}
}
if(i%>&&(top&(<<(i-)))==){
target=(top^(<<i))^(<<(i-));
if(dp[target]>dp[top]+){
dp[target]=dp[top]+;
if(!inQueue[target]){
q.push(target);
inQueue[target]=true;
}
}
}
if(i%<&&(top&(<<(i+)))==){
target=(top^(<<i))^(<<(i+));
if(dp[target]>dp[top]+){
dp[target]=dp[top]+;
if(!inQueue[target]){
q.push(target);
inQueue[target]=true;
}
}
}
}
}
} void Initialize(){
freopen("movea.in","r",stdin);
freopen("movea.out","w",stdout);
int pos=;
char ch=getchar();
while(pos>=){
while(!isdigit(ch))
ch=getchar();
origin^=(ch-'')<<pos;
--pos;
ch=getchar();
}
pos=;
while(pos>=){
while(!isdigit(ch))
ch=getchar();
goal^=(ch-'')<<pos;
--pos;
ch=getchar();
}
memset(dp,0x7F,sizeof(dp));
// printf("%X %X\n",origin,goal);
}

Backup

然后是图包时间

[HAOI 2005][BZOJ 1054] 移动玩具的更多相关文章

  1. bzoj 1054 移动玩具

    题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1054 移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想 ...

  2. Bzoj 1055: [HAOI2008]玩具取名 (区间DP)

    Bzoj 1055: [HAOI2008]玩具取名 (区间DP) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间动态规划和可 ...

  3. [BZOJ 1054][HAOI 2008]移动玩具 状态压缩

    考试的时候一看是河南省选题,觉得会很难,有点不敢想正解.感觉是个状压.但是一看是十年前的题,那怂什么! 直接把十六个数的状态压进去,因为个数是不变的,所以状态枚举的时候只要找数目一样的转移即可.而且只 ...

  4. bzoj 1054: [HAOI2008]移动玩具 bfs

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 在 ...

  5. BZOJ 1054 [HAOI2008]移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1388  Solved: 764[Submit][Statu ...

  6. 【BZOJ 1054】 [HAOI2008]移动玩具

    Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...

  7. BZOJ 1054: [HAOI2008]移动玩具(bfs)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...

  8. BZOJ 1054 题解

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1888  Solved: 1035[Submit][Stat ...

  9. BZOJ 1054 广搜

    1054: [HAOI2008]移动玩具 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩 ...

随机推荐

  1. Bash中的字符串变量扩展

    1.向尾部方向的最小化删除 (%) $pathname="/usr/bin/local/bin"$echo ${pathname%/bin*}/usr/bin/local 2.向尾 ...

  2. Bash提示符

    Bash有四种提示符 1.基本提示符(PS1):即$符号,是默认的基本提示符,当Shell运行在交互模式下时,该提示符会出现在屏幕上,可以设置为其它符号. 显示PS1设置[cb@cb:16:36:23 ...

  3. centos文件权限详解

    假设回显信息为  ①-②rws③r-x④r-x ⑤1 ⑥root ⑦root ⑧430540 ⑨Dec 20 18:27 ⑩/usr/sbin/passwd ,现在逐一分析其内容. ①. 首字符-,表 ...

  4. springmvc 之 SpringMVC视图解析器

    当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,接着Spring会分析看哪一个HandlerMapping定义的所有请求映射中 ...

  5. [1] MVC & MVP &MVVM

    开发架构之MVC & MVP & MVVM  

  6. [编织消息框架][netty源码分析]8 Channel 实现类NioSocketChannel职责与实现

    Unsafe是托委访问socket,那么Channel是直接提供给开发者使用的 Channel 主要有两个实现 NioServerSocketChannel同NioSocketChannel 致于其它 ...

  7. MVC过滤器之添加LoginAttribute,浏览器bug:重定向次数太多

    以前在写登录Action过滤时,都在每个Controller前写上CheckLoginAttribute:这次决定偷懒试一下能否将所有Action和Controller统一过滤: 出bug的代码是这样 ...

  8. 页面加载的时候自动的执行js代码

    <script> window.onload=MyAutoRun; function MyAutoRun(){ alert("函数自动执行哦!"); } </sc ...

  9. 拉勾网招聘数据分析(Echarts, SQL, java)

    这次的数据分析与决策课程,我做的是通过爬取拉勾网上的招聘信息,并用爬取到的数据整体分析互联网行业数据,项目做得差不多了,先总结下吧,后边有时间了再完善. 主要工具:  Echarts, SQL, ja ...

  10. 遇到ANDROID “call to opengl es api with no current context”错误

    延迟线程执行 Timer timer=new Timer();//实例化Timer类 timer.schedule(new TimerTask(){ public void run(){ buyed( ...