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

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

  题目更正后比 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. C语言函数篇(一)函数的组成

    函数的组成: 函数名 输入参数 返回值 返回值 函数名 (输入参数){ 执行体 } 用指针保存函数: int func(int a, int b, char c){ } --> int (*fu ...

  2. Educational Codeforces Round 42D. Merge Equals(STL)

    D. Merge Equals time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  3. 猜数字问题 python

    猜数字问题,要求如下: ① 随机生成一个整数 ② 猜一个数字并输入 ③ 判断是大是小,直到猜正确 ④ 判断时间提示:需要用time模块.random模块该题目不需要创建函数 import random ...

  4. PowerShell脚本授权最佳实践

    [TechTarget中国原创] Windows PowerShell已成为微软在Windows Server上提供的首选管理界面.因为深度整合到Windows Server操作系统,PowerShe ...

  5. mongodb安装和配置三步走

    最近在重新学习node,所以和同事一起搞了个模仿新浪微博的项目,项目刚开始,所以其他的东西就暂时先不提.这里介绍下mongodb的安装.直接搜索可以看到很多介绍,但是我第一次是失败了,不过看了好几个还 ...

  6. 斐波那契数列的三种C++实现及时间复杂度分析

    本文介绍了斐波那契数列的三种C++实现并详细地分析了时间复杂度. 斐波那契数列定义:F(1)=1, F(2)=1, F(n)=F(n-1) + F(n-2) (n>2) 如何计算斐波那契数 F( ...

  7. PCA学习笔记

    主成分分析(Principal Component Analysis,简称PCA)是最常用过的一种降维方法 在引入PCA之前先提到了如何使用一个超平面对所有的样本进行恰当的表达? 即若存在这样的超平面 ...

  8. 【bzoj2396】神奇的矩阵 随机化

    题目描述 给出三个行数和列数均为N的矩阵A.B.C,判断A*B=C是否成立. 输入 题目可能包含若干组数据.对于每组数据,第一行一个数N,接下来给出三个N*N的矩阵,依次为A.B.C三个矩阵. 输出 ...

  9. BZOJ5300 [Cqoi2018]九连环 【dp + 高精】

    题目链接 BZOJ5300 题解 这题真的是很丧病,,卡高精卡到哭 我们设\(f[i]\)表示卸掉前\(i\)个环需要的步数 那么 \[f[i] = 2*f[i - 2] + f[i - 1] + 1 ...

  10. BZOJ3990 排序(sort)

    排序(sort) 题目描述 小A有一个1~2N的排列A[1..2N],他希望将数组A从小到大排序.小A可以执行的操作有N种,每种操作最多可以执行一次.对于所有的i(1<=i<=N),第i种 ...