背包问题
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【LOJ6289】花朵(树上背包)(NTT)(链分治)(带权二分)
传送门 题解: 老年选手搞了半个月的文化课开始康复训练。 很显然要求的就是个独立集形式的树上背包。 写成卷积的形式链分治+带权二分即可。 很好写,拿下LOJ rk1。 复杂度 O(nlog2n)O(n\log^2n)O(nlog2n),分析方式类似全局平衡二叉树。 看了下AC代码,除了我和rk2,剩下的分治部分似乎都是普通二分而不是带权二分,可以卡到 O(nlog3n)O(n\log^3 n...原创 2020-02-10 13:40:38 · 956 阅读 · 4 评论 -
【ZJOI2019】开关(FWT)(背包DP)
传送门 这道题目前知道的推导原理本质不同做法有两种,另一种是生成函数:here 题解: 设pip_ipi表示在单次操作中选择了第iii个开关的概率,设UUU表示所有开关的2n2^n2n种不同状态的集合,设集合幂级数F(x)=∑T⊆UfTxTF(x)=\sum_{T\subseteq U}f_Tx^TF(x)=∑T⊆UfTxT,其中fTf_TfT表示si=[i∈T]s_i=[i\in T]...原创 2019-10-11 10:12:54 · 258 阅读 · 0 评论 -
【ZJOI2019】开关(生成函数)(单位根反演)(背包DP)
传送门 题解: 设pip_ipi表示一次操作中选择了第iii个开关的概率。 首先设F(x)F(x)F(x)表示操作了iii次之后的状态是开门状态的概率的EGFEGFEGF,注意我们并不要求这个时刻是第一次达到开门状态,考虑单位根反演,得到: F(x)=∏i=1nepix+(−1)sie−pix2F(x)=\prod_{i=1}^{n}\frac{e^{p_ix}+(-1)^{s_i}e^{-p...原创 2019-10-11 09:22:03 · 206 阅读 · 0 评论 -
【TJOI2019】唱、跳、rap和篮球(DP)(容斥)
传送门 题解: 在洛谷看到一群O(n3)O(n^3)O(n3)AC的在嘲讽O(n2logn)O(n^2\log n)O(n2logn)的。。。 但是实际上这道题有严格O(n2)O(n^2)O(n2)的解法。。。 首先考虑容斥,计算出队伍里面至少有iii组同学在讨论 [数据删除] 的方案数进行容斥。 发现是个卷积,于是非常愉快可以O(n2logn)O(n^2\log n)O(n2logn)上一...原创 2019-10-08 21:40:38 · 163 阅读 · 0 评论 -
【校内模拟】仙人球(树上背包转仙人掌上背包)
传送门 题解: 如果是一棵树就是经典的树上背包傻逼题。 如果是仙人掌,需要特殊处理环的情况。 std只能做点仙人掌(每个点在至多一个简单环中)。 我的做法可以做边仙人掌(每条边在至多一个简单环中)复杂度和std相同,而且常数还比std小。 首先给仙人掌任意定一个根。 这里给一个子仙人掌的通用定义,防止有读者不清楚。 一个仙人掌图以uuu为根的时候,vvv的子仙人掌定义如下: 删去所有uuu到vv...原创 2019-09-11 21:24:02 · 160 阅读 · 0 评论 -
【十二省联考2019】皮配(背包神题)
传送门 我zxyoi学OI两年,什么场面没见过。 这场面我真没见过。 真正的DP好题,想清楚之后完全不难写。 虽然写完再去看觉得窒息得一批。 准确来说,这道题的考察内容就是背包计数。 是的,只有背包计数,除了乘法原理甚至可以说没有任何组合数学内容。 纯粹到极致的背包DP神仙题。 题解: 设SSS为sss之和,即总人数。 首先考虑低分暴力(因为正解里面会用到)。 直接维护三位导师旗下的学员人数进行...原创 2019-09-04 22:00:26 · 223 阅读 · 0 评论 -
【校内模拟】简单题(容斥)(斯特林反演)(背包)
[]原创 2019-09-01 20:47:14 · 292 阅读 · 0 评论 -
【洛谷P4707】重返现世(Min-Max容斥)(背包)
传送门 题解: 首先令k=n−k+1k=n-k+1k=n−k+1,转化为求第kkk大。 直接利用Kth−MinMaxKth-MinMaxKth−MinMax容斥的式子我们知道要求这个东西: E(kthmax(S))=∑T⊆S(−1)∣T∣−k(∣T∣−1k−1)E(min(T))E(kth\max(S))=\sum_{T \subseteq S}(-1)^{|T|-k}{|T|-1\choo...原创 2019-07-31 09:11:38 · 151 阅读 · 0 评论 -
【HNOI2007】【洛谷P3188】【BZOJ1190】梦幻岛宝珠(01背包)(DP套DP)
洛谷传送门 BZOJ传送门 题解: 我们发现这就是裸的01背包,但是数据很大。。 于是可以模拟退火了。 题目给了一个限制,除掉2的若干次幂后剩余的数狠小,考虑从这里入手优化。 很显然的,我们可以先给所有除掉二的次数相同的物品做一次背包。 令f[i][j]f[i][j]f[i][j]表示体积为j∗2ij*2^ij∗2i,现在只装了k∗2ik*2^ik∗2i的物品的最大价值。 现在考虑合并。 发现一...原创 2019-06-19 18:48:17 · 185 阅读 · 0 评论 -
【HNOI2008】【BZOJ1004】【洛谷P1446】Cards(Burnside)(背包)
BZOJ传送门 洛谷传送门 解析: 首先题目告诉我们给的置换就是一个群,那么可以直接上Burnside。 发现这个染色有个数限制,不能用Polya。 那么怎么求置换不动点个数? 显然我们只要求一个循环里面的所有点染上相同的颜色,把所有循环以及循环的长度求出来,然后做背包方案数就行了。 由于懒得写DP就直接上记搜了。 代码: #include<bits/stdc++.h> #defi...原创 2019-05-24 21:46:27 · 150 阅读 · 0 评论 -
2018.11.07【NOIP训练】lzy的游戏(01背包)
传送门 解析: 一个月前口胡了一下这道题,然后现在才在OJ上找到。。。 其实最困扰的是后效性的处理,我第一次口胡的时候总是觉得这个后效性环形怎么处理都不太对,要么不对要么复杂度会爆炸,但是其实我们只需要知道一件事情,就是我们选择的卡牌不超过总的张数,我们就总有办法构造出一组解来,这个请感性理解一下。 代码: #include<bits/stdc++.h> using namespa...原创 2018-11-07 21:41:16 · 140 阅读 · 0 评论 -
2018.11.09【NOIP2006】【洛谷P1064】金明的预算方案(有依赖的背包问题)
传送门 解析: 首先我并没有读完题。。我也没有管什么只有两个依赖,,我直接写的最裸的单层依赖的背包问题。。。(其实依赖下面套分组还比这个要恶心)。 思路: 由于我们直接枚举所有策略,对于一个物品集合是O(2∣S∣)O(2^{|S|})O(2∣S∣)的,所以我们可以先在集合内部做一次010101背包,注意,为了减小最终的物品个数,可以使用恰好背包。 然后就是集合与集合之间的分组背包裸题了。 代码...原创 2018-11-09 09:14:15 · 133 阅读 · 0 评论 -
2018.11.06【NOIP2014】【洛谷P1941】飞扬的小鸟(背包问题)
传送门 解析: 知道是背包后应该比较好像,但是这道题最难的应该就是看出这是一道背包问题。。。 思路; 考虑用f[i][j]f[i][j]f[i][j],表示让小鸟达到位置(i,j)(i,j)(i,j)需要的最小点击次数,INFINFINF表示无法到达。 然后初始化十分显然f[0][j]=0f[0][j]=0f[0][j]=0。 接下来就是背包DP,考虑一个单位时间内可以点击任意次数,所以就是完全...原创 2018-11-06 09:00:51 · 171 阅读 · 0 评论 -
2018.10.19【POJ1742】Coins(存在性背包问题)
传送门 解析: 数据太弱了。。。听说连二进制拆分做0/10/10/1背包都能水过这道题。 思路: 我的做法复杂度是O(nm)O(nm)O(nm)。主要就是对于每一种硬币,我们将之前能够凑出来的钱数加上这个硬币做状态转移,记录一个sumsumsum数组,每次清空,sumjsum_{j}sumj表示凑出jjj的前需要用到的最少的当前硬币。 然后就可以直接状态转移搞一搞了。 代码: #includ...原创 2018-10-19 23:53:03 · 129 阅读 · 0 评论 -
2018.09.28【JoyOI1864】守卫者的挑战(期望DP)(背包问题)
传送门 解析: 本来这种题应该很快A掉,结果我读优打错调了半个多小时。。。 思路: 显然这是一个贪心的策略,那么我们就只考虑达到每个状态的概率。 记为fi,j,kf_{i,j,k}fi,j,k。表示当前已经进行了iii次挑战,赢了jjj次,背包剩余容量为kkk的概率。然而这道题题目说的最不清楚的一点:拿到的碎片不一定要直接放入背包,也就是说,背包剩余容量可能为负。 当然你可以排序处理一下,我选...原创 2018-09-28 10:11:21 · 135 阅读 · 0 评论 -
2018.09.27【BZOJ2118】墨墨的等式(背包问题)(最短路)
传送门 解析: 这道题卡数组大小卡得我心力交瘁。。 思路: 从来没见过的做法,跑最短路求解背包问题 我也是看了别的dalao的题解才会的 我们选择最小的aia_iai作为模数,使得其他所有数都可以由它转移过来。 怎么转移? 令d[i]d[i]d[i]表示当物体的总重%a_i=q时,物体最少的重量。设d[i]=td[i]=td[i]=t,那么显然对于所有的xxx,如果xx%a_i=qx且x&am...原创 2018-09-27 21:46:08 · 209 阅读 · 0 评论 -
2018.09.12【BZOJ3687】简单题(bitset)
描述 小呆开始研究集合论了,他提出了关于一个数集四个问题: 1.子集的异或和的算术和。 2.子集的异或和的异或和。 3.子集的算术和的算术和。 4.子集的算术和的异或和。 目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把 这个问题交给你,未来的集训队队员来实现。 输入 第一行,一个整数nn。 第二行,nn个正整数,表示a1a1,a2a2….,。 输出 一...原创 2018-09-12 20:03:29 · 128 阅读 · 0 评论 -
2018.09.08【POI2005】【BZOJ1531】Bank notes (多重背包)(二进制拆分)
传送门 解析: 多重背包二进制拆分法板子题。 一种物品,多种个数对答案的影响显然可以拆分成∑2i∑2i\sum2^i形式,那么复杂度直接降为logloglog。 据说这道题有单调队列优化做法,以后再更。 代码: #include&lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define re...原创 2018-09-08 19:44:36 · 239 阅读 · 0 评论