搜索
Zolrk
这个作者很懒,什么都没留下…
展开
-
Noip2015 斗地主【搜索】【贪心】
从题目中可以看出花色无用,并且出牌顺序无关紧要、 那么一个贪心的想法是少出单牌,多出顺子由于先出其他的牌会影响到出顺子,所以先去枚举各种出顺子的姿势,然后在每一次出某种顺子的状态下再去出其他的炸弹啊三带一什么的 用四个变量a1 a2 a3 a4 表示组合出 单牌,对牌,三带一/二,炸弹 的数量 回溯时记得把状态清掉(就是把那些本次出的牌再加回来),这样就不会影响到其他状态 代码…等待填坑原创 2017-09-05 15:57:13 · 338 阅读 · 0 评论 -
NOIP2011 Mayan游戏 - 搜索
一个有效的剪枝是排除等效冗沉,当两种操作形成等效效果时不重复搜索 若有两个块,那么左边的右移和右边的左移是等效的,由于题意认为右移优先于左移,所以这种情况只取右移,而一个块左边是空的时候则要尝试左移 在回溯法“还原”的时候,可以先复制出来局面,在函数里开数组(别用全局的,要保存多个局面),然后复制回去 但仔细想想不需要再复制回去了,大不了每次都开个数组,直接当dfs的参数传下去,然后每次df...原创 2018-08-20 19:27:24 · 143 阅读 · 0 评论 -
洛谷P1120 小木棍 - 搜索
想了想不知道原来棍子长度为多少的情况下,很难去搜索和确认最终状态,不确定的时候就枚举,遇事不决就枚举,反正是写暴力算法,为什么不多枚举呢 枚举了原来棍子长度时,可以顺便确定有多少根棍子,因为这个长度必须是所有棍子现在长度之和的约数 然后要加许多剪枝。。。 1.减小搜索树规模,从能够展开分支较少的情况开始搜索(把木棍从大到小排列) 2.若挑选了长度为x的棍子去拼目前的原棍子,结果这一分支失败...原创 2018-08-19 15:45:10 · 322 阅读 · 0 评论 -
洛谷P2749 [USACO5.1]夜空繁星Starry Night - 特殊判重 - 搜索
如何确认两个子图即使旋转了仍然是相同的??? 有某个结论:当一张子图内点两两之间距离和相同时,这两张图“相似” 注意是许多距离的和,必须要开根,不开根不是距离。不开根只能应用于两个路径的判断,他不是单判断两个距离之间是否相等,而是判断许多距离相加和许多距离相加之后的和是否相等,平方和和和的平方不是一个东西 还有好多小技巧 比如说我染色的时候不必再走一遍dfs,我可以直接遍历我刚刚记下的点的位...原创 2018-08-16 18:42:54 · 273 阅读 · 0 评论 -
USACO15JAN 洛谷P3116 Meeting time - 搜索 - 剪枝
数据太弱???加个剪枝就过了??? PS:wa了无数遍后,我发现自己的dfs写错了。。。。。 正解是DP。。。回来我会填坑的 原因看注释吧 #include <algorithm> #include <iostream> #include <cstring> #include原创 2018-07-25 13:17:47 · 153 阅读 · 0 评论 -
Noip2009 靶形数独 - 搜索 - 减少搜索树规模
当搜索数较浅的一层分支特别多时,这个搜索数规模比较大,因为搜索树的规模主要和“搜索中间节点”有关,因为搜素树底层节点是固定的,想要减少规模就应该削减搜索中的那些节点。 因此我们让浅层分支少,深层分支多,其规模一定是比原来小的 假设第一个节点有5条分支,第二个节点有2条分支 如果先搜索第一个节点,5条分支,每个分支再连到第二个节点,又有两条分支 整个搜索树有15个(5 + 10)“中间节点”...原创 2018-07-18 21:27:05 · 159 阅读 · 0 评论 -
Tyvj2018 小猫爬山 - 搜索 - 剪枝/迭代加深
学习OI很久以后才发觉自己对于搜索的认识有极大的偏差。。。 因为没有好好寻找一些算法资料。。。在学习时把枚举和搜索混为一谈,而且一直认为搜索就是全排列,导致我数次打出指数复杂度的暴力-_- 整理资料后才发现,指数型枚举有组合与排列,而搜索和枚举其实有很大的差别,枚举只是属于搜索的一丢丢最暴力的部分而已 枚举,直接一个个找,一般在枚举的方式上优化,使得枚举更加方便,也更容易找到答案(比如...原创 2018-07-05 15:18:29 · 378 阅读 · 0 评论 -
Codeforces 723D Lakes in Berland
题目大意 给n,m和k,n和m为所给矩阵的高和宽。k是要求最多剩下的湖的数量。 在所给的矩阵中,*代表陆地,.代表水。 湖的定义是一片连续的水(上下左右四个方向),并且水不含边界。 水含边界的情况被成为海。 问最少填多少湖的面积,使得湖的数量减少到k…原创 2017-09-28 21:49:49 · 261 阅读 · 0 评论 -
SCOI2005 骑士精神 - IDA*
棋盘太大,状态数太多,无法像八数码那样用哈希+BFS去做,但是用DFS也会T掉,这个时候可以考虑IDA*,即 迭代加深搜索 + A*剪枝。这题的h(n)就是当前与目标棋盘不同的棋子数量。在一颗含有答案的子树中,我们至多需要再走h(n)步,就可以找到答案因此,当当前步数+h(n) > 最大可走步数时,就可以剪枝于是现在要求最大可走步数,这里就体现了迭代加深,每次加大最大可走步数(直到15步),在强制认原创 2017-10-10 15:58:06 · 314 阅读 · 0 评论 -
P1441 砝码称重 - 搜索+dp
你会发现 对于这种很像背包的DP。。。不打滚动数组很有可能错,因为很多时候可能会忘记保留以前状态的答案,体现在f[i][j] = max(f[i-1][j], f[i][j]);上,因为f[i][j]可能被f[i][b[i]]更新,所以要取max,若想不取max,则必须保证这个状态只会被更新一次 这题刷表比填表更好写,刷表你的初始化只需要让f[0] = 1 然后用目前的0去更新其他状态 总结...原创 2018-09-09 16:44:01 · 172 阅读 · 0 评论