先贴一波题面

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. 每天一个JS 小demo之树菜单。主要知识点:DOM方法综合运用,递归运用

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  2. 并行模式库PPL应用实战(一):使用task类创建并行任务

    自 VS2010 起,微软就在 CRT 中集成了并发运行时(Concurrency Runtime),并行模式库(PPL,Parallel Patterns Library)是其中的一个重要组成部分. ...

  3. 通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用

      前  言  PHP     学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输 ...

  4. 在firefox的flashgot中配置各种下载器

    一.在firefox中安装flashgot下载管理器 flashgot是firefox的一个扩展,在联网的情况下,可以在firefox中的附加组件中搜索flashgot,然后安装. 二.在flashg ...

  5. MAC下解决eclipse卡顿或者运行慢的问题

    提示:假设你已经装了固态硬盘,并且有至少8Gb的内存.如果没有的话,带来的性能提升可能不大. 1.eclipse中加载的SDK数量过多会导致程序运行缓慢,解决方法删除plaforms下面用不到的SDK ...

  6. UE4 Run On owing Client解析(RPC测试)

    今天看到文档中游戏性指南->远程调用函数->在蓝图中使用远程调用函数的 Run On Owning Client 在所有权的客户端上运行部分,发现把Add Item和Remove Item ...

  7. ⑨的完美冻青蛙(frog)

    ⑨的完美冻青蛙(frog) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 输入 第一行是一个正整数n,表示上式中的p的个数.   接下来有n行,每一行两个正整数pi 和ei . 输出 ...

  8. HTML5 中的拖放

    今天,给大家整理一个html5 拖放. 首先,我们先了解一下什么是拖放? 拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HT ...

  9. 深入浅出TCP/IP协议栈

    TCP/IP协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP协议采用4层结构,分别是应用层.传输层.网络层和链路层, ...

  10. 探索Windows命令行系列(6):活用批处理解决实际问题

    1.批量修改文件名 2.批量重启服务 3.全盘搜索指定文件 3.1.全盘搜索名称为 mm.jpg 的文件,获取其全路径 3.2.查找系统中所有名称以 .docx 结尾的文件 4.调用可执行程序 4.1 ...