BZOJ 1054 广搜
1054: [HAOI2008]移动玩具
Input
Output
一个整数,所需要的最少移动次数。
Sample Input
0000
1110
0010
1010
0101
1010
0101
Sample Output
分析:
这道题拿到之后第一件想到的事情就是,诶!这是道深搜题诶。而且这个搜索很明显。这道题的数据应该也挺水的所以,就没想什么别的方法
我想的简单粗暴。
1,我们发现,无论怎么移动,如果初始和最终都放了话,那个位置其实不用考虑。因为。就算要移动它,因为它本来就要放哪个位置,那就得找一个新的放在哪个位置。这个过程我们可以想成移动别的点经过了这个位置。
2,因为如果深搜每次只能移动一个点。那么我们就在去完重后对每个初始节点将整张图搜索一遍。将每个遇到对目标节点记录其的步数。这些都放到一个forces [ number ] [ z ] 这里number指的是第几个初始节点 z指的是第几个目标节点。枚举整个图。完成整个表。。为什么我们每次不举最短的那个目标节点。因为。纵观全局,可能会遇到。虽然这个点当前是最近的。但是对别的点来说就没有最近的点。所以我们得考虑全局。当然考虑全局有很多办法。但是我都说了没想什么办法。直接暴力。
3,之后就是组合整个forces数组了,每次每个目标节点只能与一个初始节点匹配。同时还保证综合的步数最小。因为我没这么想(同上)。既然都这么暴力了!那就更暴力一点啊啊啊啊!!!!!!直接用全排列来解决这个问题。
这就是我的黄暴做法。然而所以。就是这样。dalao看到了千万别喷。
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
int one[5][5],two[5][5],cnt;
int forces[17][17];
int left[4]={1,-1,0,0},right[4]={0,0,1,-1};
int visit[5][5],ans=214748;
int visit_1[20];
struct node{
int x,y,step;
}queue[1001];
void BFS(int x_1,int y_1,int number)
{
memset(visit,0,sizeof(visit));
int head=1,last=1;
node first;
first.x=x_1;first.y=y_1;first.step=0;
queue[1]=first;visit[x_1][y_1]=1;
while(head<=last)
{
node news=queue[head];
for(int i=0;i<4;++i)
{
int x=news.x+left[i],y=news.y+right[i];
if(x>0&&x<=4&&y>0&&y<=4&&(!visit[x][y]))
{
node zz;
zz.x=x;zz.y=y;zz.step=news.step+1;
if(two[x][y]){
forces[number][two[x][y]]=zz.step;
}
queue[++last]=zz;
visit[x][y]=1;
}
}
++head;
}
return ;
}
int lie[20];
void DFS(int x)
{
if(x>cnt)
{
int ans_1=0;
for(int i=1;i<=cnt;++i)
{
ans_1+=forces[i][lie[i]];
}
ans=min(ans,ans_1);
return ;
}
for(int i=1;i<=cnt;i++)
{
if(visit_1[i])continue;
visit_1[i]=1;
lie[x]=i;
DFS(x+1);
visit_1[i]=0;
lie[x]=0;
}
return ;
}
int main()
{
for(int i=1;i<=4;++i)
for(int j=1;j<=4;++j)
scanf("%1d",&one[i][j]);
for(int i=1;i<=4;++i)
for(int j=1;j<=4;++j)
{
scanf("%1d",&two[i][j]);
if(two[i][j]==1&&two[i][j]==one[i][j])
one[i][j]=two[i][j]=0;
else if(two[i][j]==1){
++cnt;
two[i][j]=cnt;
}
}
int cnt_1=0;
for(int i=1;i<=4;i++)
for(int j=1;j<==4;++j)
{
if(one[i][j])
{
++cnt_1;
BFS(i,j,cnt_1);
}
}
DFS(1);
printf("%d",ans);
return 0;
}
嗯。就是这样。我觉得已经够暴力了。。
BZOJ 1054 广搜的更多相关文章
- Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 563 Solved: 274[Submit][ ...
- BZOJ 1054 题解
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1888 Solved: 1035[Submit][Stat ...
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5652(二分+广搜)
题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...
- nyoj 613 免费馅饼 广搜
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- poj 3278:Catch That Cow(简单一维广搜)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 45648 Accepted: 14310 ...
- 双向广搜 POJ 3126 Prime Path
POJ 3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16204 Accepted ...
- 广搜+打表 POJ 1426 Find The Multiple
POJ 1426 Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25734 Ac ...
随机推荐
- ActiveMQ 使用
ActiveMQ资料大全 官方文档 入门:http://activemq.apache.org/getting-started.html 常见问题:http://activemq.apache.org ...
- MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理
1:数据同步的原理: 当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步: 1:检查自己local库的oplog.rs集合找出最近的时间戳. 2:检查Primary ...
- 如何利用OCS缓存TomcatSession全局变量(转)
转: 首先非常感谢阿里云给我们提供了一个如此省事的平台. 我们公司是一家物流公司,主要提供运输和仓储的服务.我们现在正在把我们的系统往阿里云迁移.当然,还在迁移过程中,所以还有很多是没办法现在说得太清 ...
- Faster R-CNN CPU环境搭建
操作系统: bigtop@bigtop-SdcOS-Hypervisor:~/py-faster-rcnn/tools$ cat /etc/issue Ubuntu LTS \n \l Python版 ...
- 解决Win7旗舰版开机后无线网络识别非常慢的问题
最近电脑开机后WIFI识别和连接非常慢,不知何故.查看百度安全卫士的优化记录,发现其禁用了 Network List Service,将该服务设为自动启动,重启服务后,问题解决.PS:如此优化太可恶!
- Changing the type of a property with EF Code First
The smartest way is probably to not alter types. If you need to do this, I'd suggest you to do the f ...
- 伪装MAC地址
一.界面操作法 打开"网上邻居",右键属性"本地连接",点击配置 选择"高级",再选"网路卡位址"(不同系统名字略不同) ...
- vs2010 “最近使用的项目”为空?解决办法!
本文转自http://blog.csdn.net/likaibs/article/details/39576361 谢谢该作者的分享,我在这里继续发扬光大,直接把原文粘贴过来,方便后面的朋友查看. “ ...
- css3实现进度条的模拟
两种进度条动画的实现: 1.css3,但IE9-不支持. 2.js动画,兼容性好,但没有css3实现的顺畅 Demo: <html> <head> < ...
- [转]c++流缓冲---rdbuf()
C++标准库封装了一个缓冲区类streambuf,以供输入输出流对象使用.每个标准C++输出输出流对象都包含一个指向streambuf的指针,用 户可以通过调用rdbuf()成员函数获得该指针,从而直 ...