背包问题
Neo__Z
这个作者很懒,什么都没留下…
展开
-
hdu3008 Warcraft 【动态规划】【背包问题】
解题思路:我们可以先算出被boss打死的时间m; 设f[i][j]为第i秒后剩余法力值j时对boss的伤害。 由于每秒法力值有回复且有上届,所以用i-1转移到i的方式比较难写,改用i转移到i+1。 转移方程为:f[i+1][x]=max(f[i][j]+c[k]),x=min(j-w[k]+t,100)。 可以将无法到达的状态跳过节省时间,不跳过也对,因为其不优。#include<iostr原创 2017-10-11 18:56:20 · 335 阅读 · 0 评论 -
hdu1059 Dividing 【多重背包】
解题思路:起初以为多重背包枚举状态会超时,但借鉴了别人的剪枝后就过了, 将价值从大到小枚举,那对于两个价值a1,a2(a1小于a2),当枚举同一级别的弹珠k时,若(a2-a1)%k==0,那a1+x个k可能会等于a2+y个k,而此后a1+z个k(z>x)就一定会等于a2+(y+(z-x))个k。若倒着枚举就可以break剪枝了。详见代码。#include<iostream>#include<cs原创 2017-10-12 17:15:14 · 234 阅读 · 0 评论 -
NOIP模拟 乘积【状压dp+多组背包】
题目大意:选择不超过k个n以内的正整数相乘,使乘积使一个无平方因子数,问有多少中取法?(每个数只能取一次)1≤k,n≤5001\le k,n\le 500。解题思路:首先可以想到把不合法的数删了。那问题也就变成了使取得的数的质因数集合无交集。如果质因数个数足够少,我们就可以状压记录每个质数取还是没取,但500的范围太大。不过注意到每个数最多只会有一个比n√\sqrt{n}大的质因数,所以我们可以把所原创 2017-10-24 18:52:29 · 304 阅读 · 0 评论 -
bzoj4374 Little Elephant and Boxes【动态规划+折半搜索】
解题思路:开始以为直接求出期望得到的钱和钻石数,再背包dp一波就行了,但看了答案不是整数就知道不行了。还是要根据期望的定义,列出所有方案求解才行。但直接求出所有方案是不现实的,看了n=30,应该是折半搜索。 所以我们先固定一维,用f[i][j][k]表示前i个物品取j个,花了k个钻石所消耗的最小钱数,这个很容易dp求出,可以见代码。再折半搜索,分别取第1~n/2,第n/2+1~n个盒子,把两边的方原创 2017-12-27 09:40:48 · 424 阅读 · 0 评论 -
bzoj2118 墨墨的等式【最短路+背包问题】
解题思路:相当于无限背包求可行方案数。取任意一个a[i],设为p;那么考虑令d[i]表示当物体的总重%p=i时,物体最少的重量。设d[i]=t,那么显然对于所有的x,如果x%p=i且x>=t,都可以用总重最少的那个方案再加上若干个p得到。同时,考虑加入一个物体u,那么显然有d[(i+u)%p]可以由d[i]+u得到,这相当于从i向(i+u)%p连一条长度为u的边,那么d[i]求最小值不就是求最短路吗原创 2017-12-30 17:15:41 · 563 阅读 · 0 评论 -
hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【单调队列优化多重背包】
解题思路:题目就是求裸的多重背包。 朴素的多重背包是O(n3)" role="presentation">O(n3)O(n3)O(n^3),但用单调队列可以优化到O(n2)" role="presentation">O(n2)O(n2)O(n^2). dp方程为: f[j+k∗w[i]]=max(f[j+l∗w[i]]+(k−l)∗原创 2018-02-06 21:04:46 · 314 阅读 · 0 评论 -
bzoj5250 九省联考 秘密袭击【树上背包+拉格朗日插值+线段树合并】
解题思路:第一个想法是枚举第kkk大的值,把大于的记为1,小于的记为0,问题就转化为树上联通块大小等于kkk的个数。稍微转化一下,我们统计树上联通块第kkk大大等于iii的个数,不妨记为aiaia_i,那么 ans=∑i=1Wi(ai−ai+1)ans=∑i=1Wi(ai−ai+1)ans=\sum\limits_{i=1}^Wi(a_i-a_{i+1})而因为这样计算每个大等于ii...原创 2018-04-18 17:17:11 · 787 阅读 · 0 评论 -
bzoj4182: Shopping【点分治+单调队列优化多重背包】
题目大意:给定一棵有 n 个点的树,第 i 个点有 di 件商品,价格为 ci,价值为 wi。 你手头有 m 块钱,且你要保证你买过的点在树上互相连通,问买到的物品的总价值最多是多少。 1 ≤ n ≤ 500, 1 ≤ m ≤ 4000, di ≤ 100。 解题思路:如果直接树形dp是O(nm2d)O(nm2d)O(nm^2d)的,显然过不了考虑如果强制要选一个点怎么做。 ...原创 2018-05-17 21:35:18 · 503 阅读 · 0 评论