题目大意:给定一棵有根树,求以每个点为根的子树中有多少点到它的距离不超过l
第一眼是可并堆- - 于是怒写- - 管它正解是啥- -
从下到上维护可并大根堆 键值是该点到当前根节点的距离 一旦堆顶剪枝大于l就弹顶
时间复杂度O(nlogn)
什么?你说将整个堆都加上一个值?
打标记不就好了- - 毫无疑问可并堆是可以打标记的- -
此外我的随机堆写if(flag^=1)就T写if(ra...
分类:
其他好文 时间:
2015-02-02 23:16:51
阅读次数:
235
原题地址跟2sum、3sum、4sum、3sum closest一系列,参见这篇文章排序+DFS+剪枝+二分查找如果最后一个元素不二分查找会超时??代码: 1 vector > res; 2 3 void dfs(vector &num, vector ans, int pos, int left....
分类:
其他好文 时间:
2015-02-01 23:03:02
阅读次数:
199
http://poj.org/problem?id=1011题意:给定多根木棒的长度,要求将其重新组合成若干相等长度的木棒,求组合后木棒的最小长度解法:dfs + 重点剪枝自己想到的剪枝太弱了 学习整理下看到的剪枝具体看注释代码: 700K 0MS#include #include #include...
分类:
其他好文 时间:
2015-02-01 21:40:25
阅读次数:
113
个人感觉代码还算精简,比较容易混淆的一点是,board[] 数组,数组下表指的是八皇后棋盘的行,数组下标对应的值指的是八皇后棋盘的列,至于abs()可以去百度,是一个求绝对值的函数...
分类:
其他好文 时间:
2015-01-31 23:20:05
阅读次数:
313
原题地址跟2Sum、3Sum、4Sum类似,都是:排序+搜索+剪枝令sum = num[i] + num[j] + num[k] + (-target)(将-target看做一个必选的数),那这道题就跟4Sum(参见这篇文章)几乎一样了,变成了寻找最接近0的和。需要剪枝的地方:1. 数字太小,肯定不...
分类:
其他好文 时间:
2015-01-30 20:53:43
阅读次数:
122
原题地址标准DFS+剪枝。将数字提前排序,一来方便去重,二来创造剪枝条件。1. 如果当前数字过大,就算加上最小的数字最后都超过target,停止继续尝试之后的数字,因为后面的数字更大2. 如果当前数字过小,就算加上后面最大的数字最后都不到target,不用再考虑这个数字了,继续尝试后面更大的数字3....
分类:
其他好文 时间:
2015-01-30 19:25:36
阅读次数:
129
原题地址二叉树基本操作——遍历题目没说数字都是正数,所以没法剪枝,只能全部遍历一遍。代码: 1 vector > res; 2 3 void traverse(TreeNode *root, vector ans, int sum) { 4 if (!root) 5 retur...
分类:
其他好文 时间:
2015-01-30 14:34:35
阅读次数:
226
记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。
一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。
更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。
记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,
以后再次遇到这个状态的时候,就不必重新求解了。
这种方法综合了搜索和动态规划两方面的优点,因而还是很有实用价值的。...
分类:
其他好文 时间:
2015-01-29 14:38:55
阅读次数:
259
转自http://m.blog.csdn.net/blog/wuxinliulei/9052707Sticks 这一题仍然要采用深度优先搜索+剪枝 这一题的剪枝很重要。 首先题意是要求木棒的最短长度,首先明确一点木棒的长度一定在最长木棒长度---所有木棒长度总和之间 所以在读入木棒长度之后要找出最长...
分类:
其他好文 时间:
2015-01-29 14:09:56
阅读次数:
124