void dfs() { if(到达中点状态) { ... //根据题意添加 return; } if(越界或不合法状态) return; if(特殊状态) // 剪枝 return; for(扩展方式) { if(扩张方式所到达状态合法) { 修改操作; // 根据题意添加 标记; dfs(); ... ...
分类:
其他好文 时间:
2019-08-22 01:01:24
阅读次数:
65
小木棍 爆搜剪枝 看了题解,用一个桶记录小木棍(很是机智,反正$N\le50$),然后就是爆搜剪枝了。 主要是注意一个优化思想:每次拼一个木棍时,一定 先用大的去填再用小的去补。 递减遍历桶和下面这个最重要的剪枝都是这个优化思想 连用大刚好填满这种最优方法都无法拼出,那更不用说先用小的去拼这种方法了 ...
分类:
其他好文 时间:
2019-08-22 00:49:52
阅读次数:
72
要学好搜索,搜索是很重要的算法。那些很厉害的选手都是搜索打得好的。(By Instructor Li) ...
分类:
其他好文 时间:
2019-08-17 10:46:54
阅读次数:
114
题目大意 给出一个有根树,$1$为根,若某个节点的儿子全是叶子,你可以将该节点的儿子全部剪掉,这样的操作可以进行多次。定义这棵树的价值为:将树上所有叶子按照$dfs$序排序后,所有叶子点权之和 相邻两叶子路径上点权最大值。现在你要通过剪枝使得这棵树价值最大。 $n\leq 100000$ 分析 设$ ...
分类:
其他好文 时间:
2019-08-14 12:16:38
阅读次数:
77
传送门 挺显然的 $dp$ ,然鹅一开始想的是 $dfs$ 乱剪剪枝搞了 $70$ 分... 设 $f[i][j]$ 表示切了 $i$ 次,当前切的位置为 $j$ 的最小误差 那么转移显然枚举上一个切的位置 $k \in [0,j)$ ,有 $f[i][j]=min(f[i][j],f[i-1][k ...
分类:
其他好文 时间:
2019-08-14 10:49:30
阅读次数:
73
这题一开始不知道剪枝这种操作,只会傻傻地dfs。 然后dfs递归写80分超时,非递归写70分超时(纳尼?我一直以为非递归算法在时间上会更优秀一些,为什么会这样?!!) 剪一下枝就都能过了 1 #include<cstdio> 2 #include<iostream> 3 #include<algor ...
分类:
其他好文 时间:
2019-08-11 00:44:37
阅读次数:
104
对于最小费用最大流问题,它的重点就在于 “增广路” 什么是 增广路? 就是在以找的的路的基础上再加一条路 加上这条路能让结果更大,直接使用 Dijkstra 能找的的路是最短的路,继续用能找到剩下路中间的最小路, 但是这两条路加上来不一定是总体的最小路 ,第一次 1->3 ->5->4->6 第二次 ...
分类:
其他好文 时间:
2019-08-09 23:26:42
阅读次数:
89
Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡, ...
分类:
其他好文 时间:
2019-08-09 19:10:39
阅读次数:
88
终于上场均了qvq T1 "link" 30opts 按照剧本是个状压dp 100opts 把这个问题看作和一个人博弈 这个人非常阴险 总给你最坏情况 考虑如果有k个1 把她们分到k个集合里就好了 少一个1可以用k个2来补 少一个2可以用k个3来补 以此类推 也长成这样$\sum k^{ a_i} ...
分类:
其他好文 时间:
2019-08-04 19:51:13
阅读次数:
115
二叉苹果树 题目描述 有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共N个节点,标号1至N,树根编号一定为1。 我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵有四根树枝的苹果树,因为树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最 ...
分类:
移动开发 时间:
2019-08-04 01:25:46
阅读次数:
120