分治
MirrorGray
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BZOJ3163: [Heoi2013]Eden的新背包问题
感觉这个题已经变成经典题了… 考虑CDQ分治,solve(l,r)表示删掉[l,r]这段区间的物品后的背包数组,那么solve(l,mid)这个背包数组一定包含(mid+1,r)里的所有物品,所以只需将solve(l,r)这个背包更新后传入solve(l,mid)即可。 复杂度:T(n)=2T(n/2)+O(nM)≈O(nlognM) 为了保证复杂度,需要单调队列优化下多重背包…原创 2016-04-04 14:57:57 · 2220 阅读 · 2 评论 -
BZOJ3237: [Ahoi2013]连通图
考虑cdq分治,solve(l,r)表示把询问区间为(l,r)的边全部删掉的状态,那么递归solve(l,mid)的时候,只需要用并查集将区间在(mid+1,r)且不在(l,mid)出现的部分并起来即可,solve(mid+1,r)时同理。 get到了一个新技能,并查集的恢复,用一个栈记录即可,具体过程简单手动模拟一下就好啦…#include<cstdio> #include<cstring> #原创 2016-04-07 19:49:46 · 867 阅读 · 0 评论 -
BZOJ4555: [Tjoi2016&Heoi2016]求和
我们省选的题… 考虑这个式子的组合意义,对于每一个i,枚举j表示将i个小球放入j个有序集合,且每个集合选择或者不选的方案数。 我们用f[i]表示将i个小球放入任意个有序集合,且每个集合选择或不选的方案数,则枚举最后一个集合的大小i-j,可以得到递推式: for(int i = 1;i <=n ;i ++) for(int j = 0;j < i ;j ++)f[i]=(f[i原创 2016-06-19 18:14:48 · 2351 阅读 · 0 评论
分享