特别声明:以下题目有部分为原创题,涉及版权问题,不得转载,违者追究 法律责任!

  话说这是一套神题,只有你想不到,没有你做不到

  题目更正后比 Pascal 跑得还快哈~

  

  

  一道特别裸,但是特别坑的搜索题

  题解给出了一行字

  

  这个包含的意思就很多了~比如DFS的深度是第几朵花,而不是位置

  然后搜索要从 n 开始,反过来搜

  枚举位置的时候,加上一个 f 数组判重即可

  没有任何剪枝,但如果你是从 1 开始你就能拿到 10 分的高分,TLE 9个点

  证明我也不会,题解没讲,百度也没有

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; char s[][];
int f[],n;
void dfs(int x)
{
int i;
if (!x)
{
for (i=;i<=n;i++) puts(s[f[i]]);
exit();
}
for (i=;i<=n-x-;i++)
{
if (f[i]||f[i+x+]) continue;
f[i]=x;
f[i+x+]=x;
dfs(x-);
f[i]=;
f[i+x+]=;
}
}
int main()
{
freopen("flower.in","r",stdin);
freopen("flower.out","w",stdout);
int i;
scanf("%d\n",&n);
for (i=;i<=n;i++) gets(s[i]);
n*=;
dfs(n/);
return ;
}

  

  一开始我还想成了DP题,以为只要往下和右转移就行,结果发现如果有墙而需要往上面或者左边绕的时候会得到0

  后面回头看一眼数据范围12,显然DFS

  不剪枝,每次向四周走,判断有没有墙和有没有超界,然后走过的地方要打标机,30 分

  加第一个剪枝,如果当前已走步数大于答案,则不会再更行到答案,直接return,80分

  加第二个剪枝,如果目标地点与当前地点之间最近的路线(不考虑墙,也就是abs(x-x_now)+abs(y-y_now)>ans)大于答案,也可以return,90分

  加第三个剪枝(强行优化),先往右边走再往下边走,100分

  最后一个剪枝就是这套题最坑的地方2333333

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; const int N=;
int n,m,mx,my,ans=,tot;
bool g[N][N],f[N][N];
void dfs(int x,int y,int dep)
{
if (x==mx&&y==my)
{
if (dep<ans)
{
ans=dep;
tot=;
}
else if (dep==ans) tot++;
return;
}
if (dep==ans||abs(mx-x)+dep>ans||abs(my-y)+dep>ans) return;
f[x][y]=;
if (y+<=m&&f[x][y+]==&&g[x][y+]) dfs(x,y+,dep+);
if (x+<=n&&f[x+][y]==&&g[x+][y]) dfs(x+,y,dep+);
if (x->&&f[x-][y]==&&g[x-][y]) dfs(x-,y,dep+);
if (y->&&f[x][y-]==&&g[x][y-]) dfs(x,y-,dep+);
f[x][y]=;
}
int main()
{
freopen("maze.in","r",stdin);
freopen("maze.out","w",stdout);
int i,j,c;
scanf("%d%d%d%d",&n,&m,&mx,&my);
for (i=;i<=n;i++)
for (j=;j<=m;j++)
{
scanf("%d",&c);
if (c==) g[i][j]=;
}
dfs(,,);
printf("%d\n",tot);
return ;
}

  第三题是原题,我以前写过题解,具体请戳

  http://www.cnblogs.com/hadilo/p/5746894.html

  第四题是NOIP2003的第四题,我也写过题解

  http://www.cnblogs.com/hadilo/p/5916654.html

  就这么水过了,很森破啊~

搜索水题四连发_C++的更多相关文章

  1. 搜索 水题&&错误集锦

    引子: 本以为搜索的题目老师也不会检查,结果今天早上loli慢悠悠的说:“请同学们提交一下搜索的题目~”,顿时心旌摇曳,却也只能装作镇定自若的样子,点了点头.. 然后就开始了今天的疯狂做题,虽说题目都 ...

  2. DP+贪心水题合集_C++

    本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本次是最后一篇免费的考试题解,以后的考试题目以及题解将会以付费的方式阅读,题目质量可以拿本次作为参考 本来半个月前就已经搞得差不多了,然后 ...

  3. hdu 1181:变形课(搜索水题)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  4. 【BZOJ3362-3365】USACO水题四连A

    [BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤ ...

  5. hdu3786 Floyd或搜索 水题

    题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. uva 784 Maze Exploration 染色 搜索水题 DFS

    染色问题,其实就是看看图上某一点能扩散多少. 用DFS解决,因为BFS不是很熟 =-=...以后要多练. 提交后32ms,优化了一下,在递归前进行判定,优化到22ms,不是优化的很好... 代码: # ...

  7. poj2386(dfs搜索水题)

    Language:Default Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42069   ...

  8. DFS水题 URAL 1152 False Mirrors

    题目传送门 /* 题意:一个圈,每个点有怪兽,每一次射击能消灭它左右和自己,剩余的每只怪兽攻击 搜索水题:sum记录剩余的攻击总和,tot记录承受的伤害,当伤害超过ans时,结束,算是剪枝吧 回溯写挫 ...

  9. <hdu - 3999> The order of a Tree 水题 之 二叉搜索的数的先序输出

    这里是杭电hdu上的链接:http://acm.hdu.edu.cn/showproblem.php?pid=3999  Problem Description: As we know,the sha ...

随机推荐

  1. [Noip2016]愤怒的小鸟(状压DP)

    题目描述 题意大概就是坐标系上第一象限上有N只猪,每次可以构造一条经过原点且开口向下的抛物线,抛物线可能会经过某一或某些猪,求使所有猪被至少经过一次的抛物线最少数量. 原题中还有一个特殊指令M,对于正 ...

  2. dijkstra算法与优先队列

    这是鄙人的第一篇技术博客,作为算法小菜鸟外加轻度写作障碍者,写技术博客也算是对自己的一种挑战和鞭策吧~ 言归正传,什么是dijkstra算法呢? -dijkstra算法是一种解决最短路径问题的简单有效 ...

  3. Eclipse字体修改

    第一步: 第二步: 第三步: 第四步: 第五步: 第六步:

  4. format内置函数

    1. 函数功能将一个数值进行格式化显示. 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化. >>> format(3.14159 ...

  5. 15.2,redis发布订阅

    发布publish 订阅subscribe Redis 通过 PUBLISH . SUBSCRIBE 等命令实现了订阅与发布模式. 举例1: qq群的公告,单个发布者,多个收听者 发布/订阅 实验 发 ...

  6. P1783 海滩防御

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  7. 教你一步学会安装Hue

    一.简介 hue是一个开源的apache hadoop ui系统,由cloudear desktop演化而来,最后cloudera公司将其贡献给了apache基金会的hadoop社区,它基于pytho ...

  8. 手把手教你如何逐步安装OpenStack

    [TechTarget中国原创] 尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方.因此在Ubuntu上安装OpenStack的过程当中 ...

  9. python consumer producer

    from threading import Thread, Lock import time import random queue = [] lock = Lock() class Producer ...

  10. 《Cracking the Coding Interview》——第17章:普通题——题目14

    2014-04-29 00:20 题目:给定一个长字符串,和一个词典.如果允许你将长串分割成若干个片段,可能会存在某些片段在词典里查不到,有些则查得到.请设计算法进行分词,使得查不到的片段个数最少. ...