随笔分类 -  基本算法 搜索(DFS&BFS)

摘要:【题目】C - Remainder Game 【题意】给定n个数字的序列A,每次可以选择一个数字k并选择一些数字对k取模,花费2^k的代价。要求最终变成序列B,求最小代价或无解。n<=50,0<=ai,bi<=50。 【题解】首先需要一些性质: 1.一个数字取模k后,再取模>=k的数字就没有意义,因 阅读全文
posted @ 2018-04-03 16:13 ONION_CYC 阅读(279) 评论(0) 推荐(0)
摘要:【题意】给定n*m的网格,起点和终点位置,一些格指定下一步的方向,一些格任意。要求为方向任意的格确定方向,使起点可以走到终点。n,m<=50。 【算法】BFS 【题解】这道题最好用BFS,因为DFS容易陷入死路。 BFS过程中访问过的点标记vis,记录前驱后不用再访问,这是由于: 由于路径不可能走环 阅读全文
posted @ 2018-03-05 20:24 ONION_CYC 阅读(188) 评论(0) 推荐(0)
摘要:【题意】记正整数x的因数个数为g(x),当正整数x满足:g(x)>g(i)(0<i<x)时,称x为反素数,求不超过给定N的最大反素数,N<2e9。 【算法】数论,搜索 【题解】 这个问题等价于求1~N中因数最多的最小数字。 反素数有以下性质: 1.反素数的素因子一定是从2开始的连续素数。 必要性证明 阅读全文
posted @ 2017-12-05 21:01 ONION_CYC 阅读(213) 评论(0) 推荐(0)
摘要:【题意】按照斗地主出牌规则,给定手牌求出完的最少步数。 【算法】模拟+搜索 【题解】 可以发现除了顺子,其它的出牌规则都和点数无关,只与同点数的牌数有关。 所以可以先暴力枚举要出哪些顺子,然后每一个出完顺子后手牌的情况处理成b[4]表示牌数为1~4的点数有多少个,然后进行dfs。(为了方便,将A接在 阅读全文
posted @ 2017-10-31 08:32 ONION_CYC 阅读(394) 评论(0) 推荐(0)
摘要:【题目】洛谷10月月赛R1 提高组 【题意】给定n*n棋盘和<=16个棋子,给几个棋子种类和攻击范围,现我方只有一马,求能否吃王。 【算法】状压+BFS 【题解】16种棋子中,马不能吃马,直接处理马和王,那么就剩13个棋子,可以压成2^13表示棋盘现有棋子存活状态。 然后对vis[2^13][n][ 阅读全文
posted @ 2017-10-08 18:01 ONION_CYC 阅读(226) 评论(0) 推荐(1)
摘要:【题意】给定有向图,边严格从大编号指向小编号,求前k短路。n<=1000,m<=10000,k<=100。 【算法】归并+拓扑排序||A*求第k短路 【题解】因为此题自带拓扑序的特殊性,可以用归并写。 f[i][j]表示从i出发的第j短路,将i出去的点的前k短路依次归并。 复杂度O(m*k)。 #i 阅读全文
posted @ 2017-09-26 15:06 ONION_CYC 阅读(185) 评论(0) 推荐(0)
摘要:【算法】搜索 【题意】给定无向图,现在可能有一些点已经被删除,只给出信息是c个点不能到达结点1,求最少的不能到达结点1的个数(含已删除点)。 【题解】 真是一道奥妙重重的题目。 每个点不能到达结点1,就需要阻断所有它和1之间的路径,而要使答案最小,显然阻断该点相邻的点最优。 如果该点的邻点不能到达1 阅读全文
posted @ 2017-09-21 22:01 ONION_CYC 阅读(192) 评论(0) 推荐(0)
摘要:【算法】高斯消元-异或方程组 【题解】良心简中题意 首先开关顺序没有意义。 然后就是每个点选或不选使得最后得到全部灯开启。 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的。 异或中1可以完美实现取反。 故令xi表示第i盏灯的开关情况,然后对每盏灯的亮灭列方程,即 (1*x1)^(1*x2) 阅读全文
posted @ 2017-08-31 20:45 ONION_CYC 阅读(493) 评论(0) 推荐(2)
摘要:【题意】给定n个点和m条无向边(有重边无自环),每个点有权值di=-1,0,1,要求仅保留一些边使得所有点i满足:di=-1或degree%2=di,输出任意方案。 【算法】数学+搜索 【题解】 最关键的一步:★【%2转取反】。 首先考虑在树上做这样的问题,就显得十分朴素了。每当选择一条边,边的两端 阅读全文
posted @ 2017-08-22 22:02 ONION_CYC 阅读(269) 评论(0) 推荐(1)
摘要:【题意】给定n个节点的树,每个节点有一个m位二进制数,数字可以随时按位取反,每个数位有一个价值,定义每个点的最大价值是从根到这个点路上的数字(可以取反)或起来的数字中,1有价值0无价值,加起来得到的最大价值。 得到所有点的最大价值后,相邻点若同价值则断边,最后求长度为d的路径数量(边长1),d取遍0 阅读全文
posted @ 2017-08-15 08:59 ONION_CYC 阅读(169) 评论(0) 推荐(0)
摘要:【算法】折半搜索+数学计数 【题意】给定n个数(n<=20),定义一种方案为选择若干个数,这些数可以分成两个和相等的集合(不同划分方式算一种),求方案数(数字不同即方案不同)。 【题解】 考虑直接枚举集合的子集,再枚举子集的子集(划分方式),相当于将子集看成天平,枚举子集一些数置左,剩余数置右,则每 阅读全文
posted @ 2017-08-09 16:47 ONION_CYC 阅读(296) 评论(0) 推荐(0)
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡 阅读全文
posted @ 2016-08-10 21:08 ONION_CYC 阅读(2144) 评论(0) 推荐(6)
摘要:Day1 T1(暴力):大水题 #include<cstdio> const int ok[5][5]={ 0,0,1,1,0, 1,0,0,1,0, 0,1,0,0,1, 0,0,1,0,1, 1,1,0,0,0, }; int a[210],b[210]; int main() { int n, 阅读全文
posted @ 2016-08-10 08:20 ONION_CYC 阅读(431) 评论(0) 推荐(2)