移动玩具[HAOI2008]
题目描述
输入
输出
一个整数,所需要的最少移动次数。
样例输入
1111
0000
1110
0010 1010
0101
1010
0101
样例输出
4 题解
今天的排名是几天以来最高的,出分之前却十分难过。只打了一道半题,剩下两道敲不出正解打不出暴力,不出所料地两题爆零,意料之外地把我最好预估可能拿到的分数全部拿到了。调第一题的BFS良久,刚开始因为某些乱七八糟的错误一直运行错误,后来持续时间超限,意识到用我的想法不应该DFS后改成BFS又一直输出0,心力交瘁一直到十点左右调出样例内心感慨万分。期间多次想扔掉这题去打一打别的题,可是其他题实在不知道应该怎么做,索性一直调下去。之后第三题捡起我打了一半的暴力,优化了一下一开始超时的spfa,只求过掉前5个点。最高估分是150,最低就不好说了,比起昨天80-150的估分心理虚了不少,中午睡觉一直辗转反侧醒了好几次。但最后得了150,只能说我那三个小时没有白调,但是这样的事绝不会在正规考试中发生。毫无思路的第二题和第三题也告诉我基础实在还很不行,要学的、要复习的都很多,时间宝贵啊。
一看只有4*4的01矩阵,就觉得这题天生适合搜索,而且很可能搜出正解。二进制处理一下,开开心心开始dfs。刚开始二进制各种错乱,各种核实各种优化却发现这种搜索根本停不下来。忽然意识到DFS会把一种情况搜到底,可是它可能根本不是在往正确的方向走,想起最优解应该用BFS,又开始改成BFS。平常几乎不怎么用BFS,在取出队列中元素的时候又把while写成了if,导致结果一直是0满头雾水。终于改过了这一堆错,两个半个小时已经过去了,后面三道题一分没得,看见那个样例输出真是如释重负。这次考试一方面是因为后面的题不会做,另一方面是因为调这道题时间太长,虽然A掉了但还是非常虚。考试是过程也是经验,考试是一种有趣的经历,不管得到的是快乐还是苦恼。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int lx[],xs[],temp,dd[][][][];
char a1[];
void init()
{
memset(dd,0x7f,sizeof(dd));
for(int i=;i<=;i++)
{
scanf("%s",a1);
for(int j=;j<=;j++)
{
temp=a1[-j]-'';
if(temp)
xs[i]=xs[i]|(<<(j-));
}
}
for(int i=;i<=;i++)
{
scanf("%s",a1);
for(int j=;j<=;j++)
{
temp=a1[-j]-'';
if(temp)
lx[i]=lx[i]|(<<(j-));
}
}
}
int jg,tp;
void bj(int &x,int y)
{
x=x<y?x:y;
}
struct ZT
{
int x1,x2,x3,x4,bz;
}zt;
queue<ZT> q;
bool cj=;
void ss(int x1,int x2,int x3,int x4,int bz)
{
if(x1==lx[]&&x2==lx[]&&x3==lx[]&&x4==lx[])
{
jg=bz;
cj=;
return;
}
if(cj) return;
if(dd[x1][x2][x3][x4]<=bz) return;
dd[x1][x2][x3][x4]=bz;
int cl;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cl=-j;
if(i==)
if(x1&(<<cl))
{
if(j!=&&!(x1&(<<(cl+))))
{
temp=x1|(<<(cl+));
temp=temp&(~(<<cl));
zt.x1=temp;
zt.x2=x2;
zt.x3=x3;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(j!=&&!(x1&(<<(cl-))))
{
temp=x1|(<<(cl-));
temp=temp&(~(<<cl));
zt.x1=temp;
zt.x2=x2;
zt.x3=x3;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(!(x2&(<<cl)))
{
temp=x2|(<<cl);
tp=x1&(~(<<cl));
zt.x1=tp;
zt.x2=temp;
zt.x3=x3;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
}
if(i==)
if(x2&(<<cl))
{
if(j!=&&!(x2&(<<(cl+))))
{
temp=x2|(<<(cl+));
temp=temp&(~(<<cl));
zt.x1=x1;
zt.x2=temp;
zt.x3=x3;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(j!=&&!(x2&(<<(cl-))))
{
temp=x2|(<<(cl-));
temp=temp&(~(<<cl));
zt.x1=x1;
zt.x2=temp;
zt.x3=x3;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(!(x3&(<<cl)))
{
temp=x3|(<<cl);
tp=x2&(~(<<cl));
zt.x1=x1;
zt.x2=tp;
zt.x3=temp;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(!(x1&(<<cl)))
{
temp=x1|(<<cl);
tp=x2&(~(<<cl));
zt.x1=temp;
zt.x2=tp;
zt.x3=x3;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
}
if(i==)
if(x3&(<<cl))
{
if(j!=&&!(x3&(<<(cl+))))
{
temp=x3|(<<(cl+));
temp=temp&(~(<<cl));
zt.x1=x1;
zt.x2=x2;
zt.x3=temp;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(j!=&&!(x3&(<<(cl-))))
{
temp=x3|(<<(cl-));
temp=temp&(~(<<cl));
zt.x1=x1;
zt.x2=x2;
zt.x3=temp;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
if(!(x4&(<<cl)))
{
temp=x4|(<<cl);
tp=x3&(~(<<cl));
zt.x1=x1;
zt.x2=x2;
zt.x3=tp;
zt.x4=temp;
zt.bz=bz+;
q.push(zt);
}
if(!(x2&(<<cl)))
{
temp=x2|(<<cl);
tp=x3&(~(<<cl));
zt.x1=x1;
zt.x2=temp;
zt.x3=tp;
zt.x4=x4;
zt.bz=bz+;
q.push(zt);
}
}
if(i==)
if(x4&(<<cl))
{
if(j!=&&!(x4&(<<(cl+))))
{
temp=x4|(<<(cl+));
temp=temp&(~(<<cl));
zt.x1=x1;
zt.x2=x2;
zt.x3=x3;
zt.x4=temp;
zt.bz=bz+;
q.push(zt);
}
if(j!=&&!(x4&(<<(cl-))))
{
temp=x4|(<<(cl-));
temp=temp&(~(<<cl));
zt.x1=x1;
zt.x2=x2;
zt.x3=x3;
zt.x4=temp;
zt.bz=bz+;
q.push(zt);
}
if(!(x3&(<<cl)))
{
temp=x3|(<<cl);
tp=x4&(~(<<cl));
zt.x1=x1;
zt.x2=x2;
zt.x3=temp;
zt.x4=tp;
zt.bz=bz+;
q.push(zt);
}
}
}
while(!q.empty())
{
x1=q.front().x1;
x2=q.front().x2;
x3=q.front().x3;
x4=q.front().x4;
bz=q.front().bz;
q.pop();
ss(x1,x2,x3,x4,bz);
}
}
int main()
{
init();
ss(xs[],xs[],xs[],xs[],);
printf("%d",jg);
return ;
}
这代码有毒= =7K呀水题
移动玩具[HAOI2008]的更多相关文章
- 洛谷P4289 移动玩具 HAOI2008 搜索+状压
正解:状压 解题报告: 先,放下传送门QwQ 说真的我jio得这题不管是思路还是实现上,都还是有一定难度的?然后就看到神仙hl博客里一句"太水了不讲了"就过掉了,,,好的趴太强辽Q ...
- BZOJ1055: [HAOI2008]玩具取名[区间DP]
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1588 Solved: 925[Submit][Statu ...
- BZOJ1055: [HAOI2008]玩具取名
... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N ...
- bzoj 1054: [HAOI2008]移动玩具 bfs
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description 在 ...
- 【BZOJ】【1055】【HAOI2008】玩具取名
区间DP/记忆化搜索 sigh……看了提示才想到是区间DP >_>我果然还是太弱 f[l][r][k]表示L到R这段区间能否合并成K,那么就是枚举拆分方案(从哪里断开)和组合方式(左半合成 ...
- bzoj1054: [HAOI2008]移动玩具
hash+bfs:要注意特殊情况.(似乎连sort.lower_bound都不用数据小直接判重了... #include<cstdio> #include<cstring> # ...
- BZOJ 1055 [HAOI2008]玩具取名
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1119 Solved: 653[Submit][Statu ...
- BZOJ 1054 [HAOI2008]移动玩具
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1388 Solved: 764[Submit][Statu ...
- bzoj 1055 [HAOI2008]玩具取名(区间DP)
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1258 Solved: 729[Submit][Statu ...
随机推荐
- 引入CSS文件的方式,以及link与@import的区别
一.引入css的方式 在HTML中引入css的方法主要有4种:行内式.内嵌式.链接式和导入式. 1.行内式 <div style="background:yellow;"&g ...
- Sublime text3插件安装方法
一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...
- Android如何实现定位获取
一:GPS定位: (1).要实用Adnroid平台的GPS设备,首先需要添加上权限,所以需要添加如下权限: uses-permission android:name= android.permissi ...
- Ionic Demo 解析
Ionic Demo 解析 index.html 解析 1.引入所需要的类库 <link rel="manifest" href="manifest.json&qu ...
- 闭包JS
一句话概括的话:闭包就是一个函数,捕获作用域内的外部绑定. 官方的定义:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因为这些变量也称为该表达式的一部分. 自由变量和闭包的关系:自 ...
- 从一个针对ASP.NET MVC框架的Controller.Action的请求处理顺序来说整个请求过程。
下面引用的所有代码都来自ASP.NET MVC的源码,但是可能只选取每个方法的其中一部分. System.Web.Routing.UrlRoutingModule在管道事件中注册PostResolve ...
- VB6之写注册表
难免会遇到写注册表的情况,写了个实用点的RegWrite函数.为了减少代码量,用WScript.Shell取代了API来实现. 使用方式就在注释中了,就不再过多解释了.PS:注释比实现代码要丰富多了, ...
- ORM的概念, ORM到底是什么
一.ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使 ...
- CJOJ 2307 【一本通】完全背包(动态规划)
CJOJ 2307 [一本通]完全背包(动态规划) Description 设有n种物品,每种物品有一个重量及一个价值.但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干 ...
- JVM学习(1)——通过实例总结Java虚拟机的运行机制-转载http://www.cnblogs.com/kubixuesheng/p/5199200.html
JVM系类的文章全部转载自:http://www.cnblogs.com/kubixuesheng/p/5199200.html 特别在此声明.那位博主写的真的很好 ,感谢!! 俗话说,自己写的代码, ...