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 ...
随机推荐
- 【原】MyEclipse8.5集成Tomcat7时启动错误:Exception in thread “main” java.lang.NoClassDefFoundError
解决方法: MyEclipse->Window->Preferences->MyEclipse->Servers->Tomcat->Tomcat 6.x->L ...
- 2014中国软件开发者调查(二):Java、.NET、Web、云计算特点
继上周五放出第一篇中国软件开发者调查报告后,很多初学者和开发者翘首以盼第二篇.第三篇报告--希望这些调查报告能够给他们带来指导,解决他们的疑惑.确定他们的学习和使用信心.经过笔者在周末的努力,内容更加 ...
- jquery easyui 插件开发
(function($) { /** * 插件定义 */ $.fn.resquery = function(options, param) { if (typeof options == " ...
- Spark随机深林扩展—OOB错误评估和变量权重
本文目的 当前spark(1.3版)随机森林实现,没有包括OOB错误评估和变量权重计算.而这两个功能在实际工作中比较常用.OOB错误评估可以代替交叉检验,评估模型整体结果,避免交叉检验带来的计算开销. ...
- SVO实时全局光照:Sparse Voxel Octree based Global Illumination (SVO GI)
功能已实现,初步集成进来,暂未进行重度优化.但GI的效果已很明显.这里特地给出了开启实时GI前后的效果对比,比对场景如下:1.只有直接光照(方向光源)的场景.2在直接光照(方向光源)基础上开启了实时G ...
- Android Launcher分析和修改13——实现Launcher编辑模式(1) 壁纸更换
已经很久没更新Launcher系列文章,今天不分析源码,讲讲如何在Launcher里面添加桌面设置的功能.目前很多第三方Launcher或者定制Rom都有简单易用的桌面设置功能.例如小米MIUI的La ...
- NCPC 2013: Dance Reconstruction
题目大意 对一个初始矩阵进行置换操作,已知经K次置换后得到的矩阵为,求一组可能的. 样例解释 这里只选取第二组样例进行解释. 4 2 3 4 1 2 2 3 4 1 初始矩阵为,根据Sample Ou ...
- 解决eclipse使用Search弹出错误问题
在eclipse中搜索时,搜索完之后有时候会弹出错误对话框,虽然错误内容有时候不同,但是解决办法都一样. 这个问题是由于eclipse中文件不同步引起的.在eclipse中,工程文件是由eclipse ...
- 使用golang 开发的 andriod应用
最近在捣鼓一个东东,就是使用golang开发andriod应用.说起来简单操作起来还挺麻烦,中间又学习了很多东西.比如ubuntu,docker,angular,ionic,jquery mobile ...
- (一)u-boot-nand.bin的下载
编译.连接好u-boot-nand.bin首先想到是如何下载到OK6410上,有3种方法: (1)dnw方法 (2)tftp方法 (3)sd卡方法 3种方法各有优点和缺点,下面逐一介绍: 一.dnw方 ...