Counter类:计数器IntPk中包含主键publicclassCounterextendsIntPK{
privateintcount;
publicintgetCount(){
returncount;
}
publicvoidsetCount(intcount){
this.count=count;
}
}MinHeap类:最小堆排序类packagecom.ryx.incantation.model;
importcom.ryx.incantation.en..
分类:
编程语言 时间:
2014-12-28 02:01:43
阅读次数:
232
题目大意:求1~n的排列能组成多少种小根堆
考虑一个1~i的排列所构成的堆,l为左儿子大小,r为右儿子的大小
那么1一定是堆顶 左儿子和右儿子分别是一个堆 显然如果选出l个数给左儿子 那么左儿子的方案数显然是f[l],右儿子的方案数为f[r]
于是有f[i]=C(i-1,l)*f[l]*f[r]
于是我们线性筛处理出阶乘和阶乘的逆元 代入即可得到WA
原因是这题n可以大于p 此时要用到L...
分类:
其他好文 时间:
2014-11-21 16:21:39
阅读次数:
156
用数组实现一个小根堆,并完成排序的操作。(具体请看注释)
堆的基本操作实际上就几种:
1.向下调整操作AdjustDown()
2.向上调整操作AdjustUp() (向堆中插入元素时用到)
3.建堆操作BuildHeap(),其中要不断调用AdjustDown()来维护堆的性质
4.弹出堆顶元素GetRoot(),之后也要用到AdjustDown()来维护堆
ps(关于建堆):如...
分类:
编程语言 时间:
2014-11-15 00:13:42
阅读次数:
207
查错考场上又写挂的一道签到题。。。我们发现这题要求得到一个最小字典序列显然找到所有序列然后排序是不可取的,那么我们不能使用平常的拓扑排序方法,怎么搞使得在每次处理拓扑顺序的时候来维护呢?用小根堆维护入度为0的点即可,输入的时候统计入度{$inline on}const maxn=100010;typ...
分类:
其他好文 时间:
2014-11-02 09:17:18
阅读次数:
285
好吧。。。想了半天想错了。。。虽然知道是贪心。。。我们每次找没有被买的两种价格最小的牛,比较a = 当前差价最大的 + 当前优惠券价格最小的牛与b = 当前非优惠券价格最小的牛所以。。。我们要先维护两个小根堆,分别表示用优惠券买的牛的价格和不用优惠券买的牛的价格还有个叫Recover的大根堆,表示当...
分类:
其他好文 时间:
2014-11-01 21:43:40
阅读次数:
309
我们这里的堆是指用来表示元素集合的一种数据结构一个二叉树是一个堆是由堆的两个性质决定的(以小根堆为例)1:任何节点的值都小于或等于其子节点的值2:该二叉树最多在两层上具有叶节点,其中最底层的叶节点尽可能的靠左分布我们可以从数学上约束这两个性质x[i/2]n) break;//no child nod...
分类:
其他好文 时间:
2014-10-27 12:25:02
阅读次数:
147
题意:问第n(n
题目链接:http://poj.org/problem?id=1338
——>>1, 2, 3, 4, 5, 6, 8, ...
假设小根堆存以上丑数,那么每次取出最小的数,这个最小的数nMin,它可以生成三个数:nMin * 2, nMin * 3, nMin * 5,将这三个数放入小根堆继续,一直复筛出1500个丑数为止。
小根堆可用优先队列来替代。
#inclu...
分类:
其他好文 时间:
2014-10-21 10:21:52
阅读次数:
215
堆排序分为两个过程:1.建堆。堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆。如果是大根堆,则通过调整函数将值最大的节点调整至堆根。2.将堆根保存于尾部,并对剩余序列调用调...
分类:
编程语言 时间:
2014-10-03 00:28:23
阅读次数:
255
概要:c++的stl是个神奇的东西,需要好好学习。技巧及注意:lower_bound是第一个大于等于要查找值upper_bound是第一个大于要查找的值stl中的容器中的比较几乎全都用"的含义实现小根堆。lower_bound也可以重载<,实现找到最后一个大于等于要查找值(二分的lis就是这么实现的...
分类:
其他好文 时间:
2014-09-30 07:18:02
阅读次数:
204