背包
SC.ldxcaicai
我很菜=_=
展开
-
2018.09.08 bzoj1531: [POI2005]Bank notes(二进制拆分优化背包)
传送门 显然不能直接写多重背包。 这题可以用二进制拆分/单调队列优化(感觉二进制好写)。 所谓二进制优化,就是把1~c[i]拆分成20,21,...2t,c[i]−2t+1+120,21,...2t,c[i]−2t+1+12^0,2^1,...2^t,c[i]-2^{t+1}+1的组合。 这样物品总个数就变成了∑log(c[i])∑log(c[i])\sum log(c[i]) 于是可以...原创 2018-09-08 19:37:13 · 153 阅读 · 0 评论 -
2018.09.17 atcoder Tak and Cards(背包)
传送门 背包经典题。 直接f[i][j]f[i][j]f[i][j]表示选i张牌和为j的方案数。 最后统计答案就行了。 代码: #include<bits/stdc++.h> #define N 55 #define ll long long using namespace std; ll f[N][N*N],ans=0; int x,a,n; int main(){ f[0][0]...原创 2018-09-17 21:51:07 · 366 阅读 · 0 评论 -
2018.09.25 51nod1597 有限背包计数问题(背包+前缀和优化)
传送门 dp好题。 我认为原题的描述已经很清楚了: 你有一个大小为n的背包,你有n种物品,第i种物品的大小为i,且有i个,求装满这个背包的方案数有多少。 两种方案不同当且仅当存在至少一个数i满足第i种物品使用的数量不同。 然而我只会O(n2)O(n^2)O(n2)的做法。 然后通过搜题解学会了O(n∗sqrt(n))O(n*sqrt(n))O(n∗sqrt(n))的做法。 简单讲讲。 首先我们需...原创 2018-09-25 09:05:49 · 383 阅读 · 0 评论 -
2018.09.27 bzoj2118: 墨墨的等式(最短路+背包)
传送门 好题啊。 首先找到最小的一个非零系数记做a1a_1a1,然后如果WWW modmodmod a1=W′a_1=W&#x27;a1=W′ modmodmod a1a_1a1,且WWW是方程的一个可行解,那么显然W′W&#x27;W′也是一个可行解。 自然会想到我们用完全背包的思想对每一个余数求出要达到这个余数的最小可行解,这样整个范围中到达这个余数的可行解个数就可以统计...原创 2018-09-27 19:46:22 · 274 阅读 · 0 评论 -
2018.10.19 NOIP训练 游戏问题(分组背包)
传送门 分组背包经典问题。 令f[i][j]f[i][j]f[i][j]表示前iii组花费为jjj的最优值。 g[i][j]g[i][j]g[i][j]表示前iii组,第iii组已经支付了平台费用的最优值。 然后用ggg来转移f,gf,gf,g就行了。 代码 ...原创 2018-10-19 08:20:29 · 151 阅读 · 0 评论 -
2018.10.20 bzoj2748: [HAOI2012]音量调节(背包)
传送门 这题是不是太sbsbsb了一点。 难度直逼普及-。 直接背包判存在性就行了。 代码: #include<bits/stdc++.h> using namespace std; bool f[2][1005],tmp=0; int ans=-1,n,bg,mx,x; int main(){ scanf("%d%d%d",&n,&bg,&mx),f[0][...原创 2018-10-20 23:37:30 · 177 阅读 · 0 评论 -
codeforces 946D. Timetable(背包)
传送门 题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完后才能离开)。 背包sbsbsb题。 注意可以从首尾分别逃课。 对于每天的上课情况我们都预处理出一个数组aia_iai表示这天逃iii节课在校的最少时间。 然后跑分组背包就可以了。 实际上可以滚动数组优化一波...原创 2018-12-08 18:02:04 · 271 阅读 · 0 评论 -
loj#6515. 贪玩蓝月(线段树分治+01背包)
传送门 题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组(wi,vi)(w_i,v_i)(wi,vi),支持询问从当前队列中选取若干个元素是的他们的和对 MODMODMOD 取模后余数在[l,r][l,r][l,r]中,使得这些装备的战斗力之和最大。 思路:直接看询问貌似可以用010101背包。 然后由于这个双端队列只能在队首和队尾弹入弹出,那么考虑按时间线段树分...原创 2019-01-13 19:59:37 · 463 阅读 · 0 评论 -
bzoj1042: [HAOI2008]硬币购物(完全背包+容斥原理)
传送门 题意简述:有四种面值的硬币,现在qqq次询问(q≤1000)(q\le1000)(q≤1000),每次给出四种硬币的使用上限问最后刚好凑出sss块钱的方案数(s≤100000)(s\le100000)(s≤100000). 思路:先跑完全背包预处理出所有硬币都无限制时候的答案。 然后每次询问的时候枚举容斥掉多算的情况即可。 代码: #include<bits/stdc++.h>...原创 2019-02-09 00:21:31 · 144 阅读 · 0 评论