dfs
河渔船
成长的小垃圾
展开
-
P1074 靶形数独(TLE 75)
题目#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#define LL long longusing namespace std;int lief[10][10],hangf[10][10],gef[10][10];int qu原创 2017-02-05 16:52:37 · 311 阅读 · 0 评论 -
蝉(90分的暴力)
n个点的树,m次操作 给出一棵树,维护下列操作: 1.在x位置放上一只蝉。(如果已经有蝉,忽略此操作) 2.查询x位置的坏掉指数(坏掉指数是指距x位置最近的蝉的距离) 一开始时在1的位置有一只蝉。 10% N,M ≤ 10 40% N,M ≤ 100 100% N ≤ 2 × 10^5 ,M ≤ 10^5那我们用暴力来做好了,每次放入蝉时,更新一下每个蝉的坏掉指数,用bfs或者原创 2017-07-25 11:11:13 · 217 阅读 · 0 评论 -
P2667 超级素数
https://www.luogu.org/problem/show?pid=2667#subn<=100000000,线性筛都不灵了,不过要是考试的话我会选择打表,嘻嘻。 怎么办呢? 我们想一想,符合条件的数一定不多,我们可以选择造一个这样的数。 从高位开始造,只有再加上一位后的数是质数我们才加,所以我们搜索经过的数都符合条件。 时间复杂度也就是不到O(10^6)。#include<ios原创 2017-08-09 15:47:38 · 537 阅读 · 0 评论 -
生日蛋糕
https://www.luogu.org/problem/show?pid=1731 是一道搜索题,重点在于剪枝。 具体写在代码中#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;int n原创 2017-07-27 09:18:05 · 1241 阅读 · 0 评论 -
P1514 引水入城
https://www.luogu.org/problem/show?pid=1514先用dfs搜索,从最上面的一行往下拓展,所有点拓展完后,扫描最后一行是否有没被染上色的,有则说明 不能满足要求; 如果没有,在用dfs,计算出最上面一行的每个点(大于等于两边的点)能拓展到的最左端和最右端,然后就转化成了区间覆盖问题。区间覆盖问题是给你几个区间,然后给你一个大区间,用尽量少的小区间来覆盖大区间。原创 2017-08-06 20:52:31 · 296 阅读 · 0 评论 -
P1378 油滴扩展
https://www.luogu.org/problem/show?pid=1378 思路简单的搜索题。 但是!这题真的是让我挠心啊! 请看注释的那两行,为什么!!(表示被这样坑了一天)#include<iostream>#include<cstring>#include<cstdio>#include<algorithm> #include<cmath>#define PI 3.原创 2017-08-07 11:03:41 · 688 阅读 · 0 评论 -
圆桌游戏
【问题描述】 有一种圆桌游戏是这样进行的:n个人围着圆桌坐成一圈,按顺时针顺序依次标号为1号至n号。对1< i< n的i来说,i号的左边是i+1号,右边是i-1号。1号的右边是n号,n号的左边是1号。每一轮游戏时,主持人指定一个还坐在桌边的人(假设是i号),让他向坐在他左边的人(假设是j号)发起挑战,如果挑战成功,那么j离开圆桌,如果挑战失败,那么i离开圆桌。当圆桌边只剩下一个人时,这个人原创 2017-09-13 17:48:41 · 3296 阅读 · 0 评论 -
NOIP 2003 加分二叉树
评测传送这个题可以记忆化搜索做的。 注意边界条件。 对于先序遍历,递归就可以了(在dfs的时候用一个数组记录根节点就可以了)。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<ctime>#include<queue>#define LL long longusing nam原创 2017-10-20 15:54:04 · 335 阅读 · 0 评论 -
P1078 文化之旅
题目链接搜索过的。 不过中间加上一个类似spfa里面的松弛优化。 数据好像比较水。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int M=107*107;int n,m,s,t,k;int b[109][原创 2017-11-08 09:13:51 · 324 阅读 · 0 评论 -
栅栏围大葱 dan
问题描述 m*m的方阵上有棵葱,你要修一些栅栏把它们围起来。一个栅栏是一段沿着网格建造的封闭图形(即要围成一圈)。各个栅栏之间应该不相交、不重叠且互相不包含。如果你最多修个栅栏,那么所有栅栏的长度之和最小是多少?输入格式 第一行三个整数。 接下来行每行两个整数代表某棵葱的位置。输出格式 一行一个整数代表答案。样例输入1 6 1 4 1 3 4 2 4 4 6 4 样例输出1 1原创 2017-10-08 11:14:46 · 637 阅读 · 2 评论 -
P1278 单词游戏
题目链接记忆化搜索。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define LL long longusing namespace std;const int M=(1<<17);int f[M][20],n,len[20],ans;char s[20]原创 2017-11-09 15:49:47 · 531 阅读 · 0 评论 -
NOIP 模拟题 跳跃
C 跳跃 文件名 输入文件 输出文件 时间限制 空间限制 jump.cpp/c/pas jump.in jump.out 1s 512MB 题目描述 美丽国有 n 座小岛。这些小岛排成了一条直线,依次编号为 0,1,2,3… 有的小岛 上有金块,有的小岛上没有。美丽国有一个巨人 Bob,有一天他决定从第 0 个岛开 始,一直往后跳,看看自己能收集多少金块。 当然,Bob 不是没有目的性原创 2017-10-24 17:47:26 · 393 阅读 · 0 评论 -
Codevs 2370 小机房的树
传送 LCA的应用。 用Tarjan的方法来找最近公共祖先,dfs过程中求出当前节点到根节点的距离。 那么ans=dep[u]-dep[lca]+dep[v]-dep[lca];#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define LL long long #define M 750009原创 2017-10-16 17:37:49 · 280 阅读 · 0 评论 -
NOIP 模拟题 国际跳棋
B 国际跳棋 文件名 输入文件 输出文件 时间限制 空间限制 chess.cpp/c/pas chess.in chess.out 1s 512MB题目描述 国际跳棋是一种古老的棋类游戏,远在古埃及法老时期就已存在,现代国际跳 棋是在 12 世纪定型的。国际跳棋是由各国的民族跳棋演变而来,其历史源远流长。 简化版(与标准国际跳棋略有差别)国际跳棋规则: • 国际跳棋的棋盘由 10 × 1原创 2017-10-25 16:50:52 · 1601 阅读 · 0 评论 -
NOIP模拟题 大奖赛
题目描述 Lancelot 市近期要举办大奖赛啦!住在市里的市民都十分兴奋,Morgan 也不例 外。他查了一下比赛的信息,发现比赛一共由 N 场,并且每一场的门票价格可能 会不相等。Morgan 留给比赛的预算是 K 元;他想知道,一共有多少种买票的方 案,使得门票之和不超过 K 呢?输入 第一行两个整数 N 与 K,代表比赛的场数和自己的预算。 第二行 N 个整数 Ai,代表每场比赛原创 2017-10-23 11:17:00 · 768 阅读 · 0 评论 -
number 90分的暴力
数字(number) Time Limit:2000ms Memory Limit:128MB题目描述 LYK定义了一个新的计算。 具体地,一开始它有两个数字a和b。 每一步,它可以将b增加1,或者将a乘上b。 也就是说(a,b)经过一次操作后可以变成(a,b+1)或者(a*b,b)。再经过一次操作可以变成(a,b+2)或者(a*(b+1),b+1)或者(a*b,b+1)或者(a*b原创 2017-07-24 10:46:53 · 252 阅读 · 0 评论 -
一道搜索好题
给定一个数S,找任意个正整数a1,a2,…,an,使得它们的和恰好等于S,且它们的倒数之和与1的差不超过10^-6。 输出任意一种方案或者输出无解。 S<=65536 解析: 事实上也是简单的搜索。 从小到大枚举每个数,加入试试看。 两个剪枝: ①当前的和加上最大的和到不了1,退出。//这个剪枝怎么写啊 ②当前的和加上最小的和都超过了1,退出。 代码:#include<iostre原创 2017-07-24 08:23:31 · 424 阅读 · 0 评论 -
k`th number
折半搜索(meet in the middle)和two point; 题目:有n个数,共有2^n个子集,一个子集的值看做其所有数的和。 求这2^n个子集中第K大的子集。 n<=35. 观察数据范围,如果直接搜索会爆栈的,所以就有了折半搜索。 将两部分的结果两两任意组合就构成了所有的集合。 用二分(判定用two原创 2017-07-24 08:16:55 · 160 阅读 · 0 评论 -
P1219 N皇后(位运算&普通dfs)
题见洛谷位运算版(设计巧妙,需要回顾,加深理解)#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<vector>#include<queue>using namespace std;int a[20];int ans=0,uplimit,n;原创 2017-02-07 15:06:43 · 191 阅读 · 0 评论 -
P1434 滑雪(记忆化搜索)
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<vector>using namespace std;int ans[200][200];int tall[200][200];int dx[]={0,1,-1,0,0};int dy[]={0,原创 2017-02-07 11:20:30 · 223 阅读 · 0 评论 -
P1118 数字三角形(技巧)
题见洛谷 带有技巧的搜索,用到杨辉三角形 不难看出 第几个(k)拆的数(虽说并不是拆的),系数为杨辉三角第n行,第k列的数字#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<vector>using namespace std;int n,原创 2017-02-07 09:18:13 · 317 阅读 · 0 评论 -
!算 24 (dfs)
总时间限制: 3000ms 内存限制: 65536kB 【】描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可原创 2017-02-06 09:42:19 · 306 阅读 · 0 评论 -
P1074 靶状数独(优化)
题见洛谷#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#define LL long longusing namespace std;bool lief[10][10],hangf[10][10],gef[10][10];int原创 2017-02-07 16:39:18 · 263 阅读 · 0 评论 -
P1541 乌龟棋
题见洛谷记忆化搜索#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<algorithm>using namespace std;int num[5],a0[400];int dp[40][40][40][40],ans=0;int n,m;int dfs(int x,int a,原创 2017-02-08 09:44:03 · 337 阅读 · 0 评论 -
P1063 能量项链(区间dp)
题见洛谷#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<algorithm>using namespace std;long long ans=0;int a[300],n,f[300][300];int main(){ scanf("%d",&n); for(原创 2017-02-08 16:35:36 · 327 阅读 · 0 评论 -
P1330 封锁阳光大学
luogu坑: 图可能分为多个连通块,对于每个连通块都要找染色个数较小的那种颜色,sum进ans#include<iostream>//对于每一块连通分量都应该能够分为二分图 才能够封锁全部的道路,否则Impossible #include<cstring>#include<string>#include<algorithm>#include<queue>#include<vector>原创 2017-03-03 15:53:47 · 389 阅读 · 0 评论 -
P1605 迷宫
https://www.luogu.org/problem/show?pid=1605#subdfs#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std;int an原创 2017-03-19 11:32:41 · 1011 阅读 · 0 评论 -
P1101 单词方阵
https://www.luogu.org/problem/show?pid=1101#sub#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std;int dx[]=原创 2017-03-26 10:01:19 · 874 阅读 · 0 评论 -
P1018 乘积最大
https://www.luogu.org/problem/show?pid=1018#sub 其实这个数据范围貌似搜索是过不了的,但是在lg上过了 这里搜索的方法是,dfs(int x,LL ans,int bef),x表示已经用了几个乘号,ans表示前面放完乘号得到的乘积,bef表示上一个乘号放的位置(后面); 那么,如果x#include<iostream>#include<cst原创 2017-06-02 17:29:21 · 1171 阅读 · 2 评论 -
斗地主(大暴搜)
大暴搜题; 搜索顺子,然后把剩下的牌按照四带,三带,对牌,单牌打出; 顺子有单顺,双顺,三顺。我一开始处理时把大小王分开处理了,不知啥原因不对,只有30 fen; 然后把大小王看做对牌后,就ac了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include原创 2017-06-11 17:08:40 · 256 阅读 · 0 评论 -
P1120 小木棍 [数据加强版]
枚举最小长度(从max–>sum),用dfs来判断,如果能成功就可以,退出即可。 dfs中有好多高深的剪枝!! 先将长度降序排序,便于剪枝。剪枝: 判断当前的len时 1).如果在前面已经建造这一根长木棒的一部分的基础上如果这跟小木棒不能成功,那么和它长度相同的一定也不成功。 2).如果正好这跟小木棒再放上能够建成一根长木棒,而且不成功,那么当前枚举的长木棒len就一定不能成功,retur原创 2017-08-07 17:16:09 · 542 阅读 · 0 评论 -
P1092 虫食算
https://www.luogu.org/problem/show?pid=1092好一道搜索题! 一开始我自己写了一个史上最无脑的搜索,结果只得了10分,全部TLE掉。参考了题解,才发现自己的暴力搜方法不太对,我是枚举数的每一位是每一个数。。。就是好无脑,不超时才怪。参考了题解(有些题解有太多太多的剪枝,好像处理得太过繁琐,我参考的题解简单易懂),叙述一下法。 我们可以这样来搜索:我们记录每原创 2017-08-07 21:14:59 · 714 阅读 · 1 评论 -
刷题#R10
T1 理解题意,模拟即可。 T2 and是递减的,or是递增的。 用倍增预处理。 然后枚举左端点,二分右端点的范围或者用倍增求右端点的范围。 建议用倍增法,因为二分好像很慢,我的二分T掉三个点,二倍增查找0.1秒。 T3 树上dp+dfs来优化。 分析:显然的,树形dp,状态也很好想到:f[i][j]表示以i为根的子树收集到j个果子的方案数.转移的话就相当于是背包问题,每个子节点可原创 2017-11-03 21:17:05 · 227 阅读 · 0 评论