搜索水题四连发_C++
特别声明:以下题目有部分为原创题,涉及版权问题,不得转载,违者追究 法律责任!
话说这是一套神题,只有你想不到,没有你做不到
题目更正后比 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++的更多相关文章
- 搜索 水题&&错误集锦
引子: 本以为搜索的题目老师也不会检查,结果今天早上loli慢悠悠的说:“请同学们提交一下搜索的题目~”,顿时心旌摇曳,却也只能装作镇定自若的样子,点了点头.. 然后就开始了今天的疯狂做题,虽说题目都 ...
- DP+贪心水题合集_C++
本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本次是最后一篇免费的考试题解,以后的考试题目以及题解将会以付费的方式阅读,题目质量可以拿本次作为参考 本来半个月前就已经搞得差不多了,然后 ...
- hdu 1181:变形课(搜索水题)
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submis ...
- 【BZOJ3362-3365】USACO水题四连A
[BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤ ...
- hdu3786 Floyd或搜索 水题
题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- uva 784 Maze Exploration 染色 搜索水题 DFS
染色问题,其实就是看看图上某一点能扩散多少. 用DFS解决,因为BFS不是很熟 =-=...以后要多练. 提交后32ms,优化了一下,在递归前进行判定,优化到22ms,不是优化的很好... 代码: # ...
- poj2386(dfs搜索水题)
Language:Default Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42069 ...
- DFS水题 URAL 1152 False Mirrors
题目传送门 /* 题意:一个圈,每个点有怪兽,每一次射击能消灭它左右和自己,剩余的每只怪兽攻击 搜索水题:sum记录剩余的攻击总和,tot记录承受的伤害,当伤害超过ans时,结束,算是剪枝吧 回溯写挫 ...
- <hdu - 3999> The order of a Tree 水题 之 二叉搜索的数的先序输出
这里是杭电hdu上的链接:http://acm.hdu.edu.cn/showproblem.php?pid=3999 Problem Description: As we know,the sha ...
随机推荐
- linux学习(3)——vim文本编辑工具
(三) vi与vim的最大区别就是编辑一个文本vi不显示颜色,vim显示颜色. 安装: yum install -y vim-enhance Vim有三种模式 A:一般模式 上下左右光标 k j h ...
- strak组件(9):关键字搜索
效果图: 在列表视图函数增加搜索功能. 新增函数 def get_search_list(self) 钩子方法,获取搜索条件 一.strak组件 strak/service/core_func.py ...
- rootfls(根操作系统)
rootfs根文件系统,linux下的任何目录都是rootfs的一个路径 Files 文件 Directory 目录 FHS(文件层级标准)规定了linux发行标准,也就是一些固定的文件存储 文件 ...
- APUE中对出错函数的封装
// 输出至标准出错文件的出错处理函数static void err_doit(int, int, const char *, va_list); /* * Nonfatal error relate ...
- HyperLedger Fabric 1.4 比特币历史(1.1)
比特币是一种数字货币,也是一种创新思维,把人们带入到一个无中心化.完全可信任.安全可靠的全新思维领域:一个叫“中本聪”的人或组织,使我们思维产生化学反应,他在2008年10月31日发表了比特币白皮书& ...
- MySQL忘记密码怎么重置
1打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 输入命令 mysqld --skip-grant-tables 回车,此时就跳过了mysql的用户验证.注意输入此命令之后 ...
- 9 Django 模型层(2) --多表操作
创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系( ...
- 3,Python常用库之三:Matplotlib
一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度 ...
- Xcode 代码提示功能失效
前言: 以前好像很少碰到Xcode中代码提示出问题的情况,最近经常遇到这个问题.没有了Xcode的智能提示,发现我已完全不会写代码了. 本来想吐槽下万恶的baidu,鉴于百度前端时间的各种(贴吧.竞价 ...
- 《Cracking the Coding Interview》——第17章:普通题——题目10
2014-04-28 23:54 题目:XML文件的冗余度很大,主要在于尖括号里的字段名.按照书上给定的方式进行压缩. 解法:这题我居然忘做了,只写了一句话的注解.用python能够相对方便地实现,因 ...