动态规划-背包
文章平均质量分 79
ruclion
天上一日,地下十年
展开
-
14寒假集训GeoDefense
题目连接 题意: 给定n个节点组成的树,1为敌方基地,叶子结点为我方结点。我们可以在每个结点安放炮台,至多一炮,然后就可以打炮,每个结点有ki种炮,每种炮有一个花费和一个能量(能量对应着打掉敌人多少hp)。敌人可能往一个结点的每条分支跑,并且往哪一个分支跑是不确定的,就是说几个分支取最坏结果,最后问怎么打炮,才能使打掉的敌人hp最多。 题解:首先显然是树形dp,考虑一个节点以及它的分支。对于节原创 2015-02-28 22:01:41 · 366 阅读 · 0 评论 -
zoj 3812 We Need Medicine
题目链接 题意:有n~400中化学成分,每种成分要么选取重量Wi~50,获得Ti的TEV~200000值,要么不取,获得0的TEV值。之后又Q~400种病毒询问,对于每种病毒,要求配置质量为Mi~50的药物,并且TEV值为Si~200000,求出针对此病毒的化学成分组成,任意一组就行。 题解:每次询问固定M和TEV值,看是否能够组成,本来M和TEV要合并作为dp的维数,但是这样浪费了dp的值,原创 2015-03-13 11:05:19 · 381 阅读 · 0 评论 -
HDU 4341 Gold miner
题目链接 题意:一个人在原点(0,0)抓金子,n~200个金子,每块金子有一个获得需要的时间t和价值v。而且有的金子可能在一条直线上,那只能先抓近的,再抓远的。求在给定时间T~40000下,所能获得的最大价值。坐标y 大于0; 题解:不在一条线上,就是普通的01背包,一条线上的是依赖背包,并且是退化了的树,其实还是可以以前的树形依赖dp的思路,先考过去,然后强制使用,最后取大。预处理是,先把y原创 2015-03-13 10:47:54 · 424 阅读 · 0 评论 -
hdu 5000 Clone
题目链接 题意:DRD具有分身的能力,对于两个分身A和B来说,如果A的各个能力都强于B,那么B就无法生存(其实就是每个有一个n维向量,每个人相比于其他必须有一个突出大的,比如2,1 和 1 ,1 就不能共存)先给定DRD的n~2000种能力的上限值,上限值的和sum_t~2000,问最多有多少个克隆人可以共存,结果MOD 1E7; 题解:重点是考虑两个互相共存的东西,比如1,2 和 2 ,1原创 2015-03-13 10:53:07 · 324 阅读 · 0 评论 -
HDU 2955 Robberies
题目链接 题意:T~100组数据,n~100个银行,每个银行都有一个钱数m~100,和抢这家银行钱被抓的概率,有一个limit概率,每个银行之间是独立的,求在不超过limit可以抢的最大钱数。 题解:用钱数作为数组维数,dp【i】表示偷i元被抓的概率,扫过去,中间是小细节处理。原创 2015-03-12 23:18:19 · 275 阅读 · 0 评论 -
uva 624 - CD
题目链接 题意:要把cd上的音乐导到磁带里,要求尽量使磁带剩余的空间小并按顺序打印出每次磁带中的每个音轨长度。tracks不超过20,且按顺序输出,当有多种答案时, 输出任意一种 题解:水题。但是要和以前的一道:剩余的物品装不进去的种类数 区分开。这个只要求剩空间最少,最后扫一遍就好了。 重点:剩余空间 = tot-用的空间 #include #include #include #原创 2015-03-21 23:46:11 · 223 阅读 · 0 评论 -
uva 10154 Weights and Measures
题目链接 题意:有若干只乌龟n~10000,每只乌龟有重量和负重两个属性,现在求这若干只乌龟最多可以叠多少层 题解:乌龟的排列顺序会影响到结果,所以第一步是排序贪心。标准以前的题目中写过,就是用两只乌龟比较。然后dp【i】,指叠放了i只乌龟,然后最薄弱的承受是多少。 重点:排序dp #include #include #include #include #include #inc原创 2015-03-21 23:35:36 · 334 阅读 · 0 评论 -
寒假集训——饭卡
题目链接 题意:电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n~1000种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额m~1000,问最少可使卡上的余额为多少。 题解:稍微变了下,最原创 2015-03-10 22:48:11 · 317 阅读 · 0 评论 -
寒假集训——Index of super-prime 和 北航9届校赛晴天小猪爱61
Index of super-prime题目链接 Index of super-prime题意:首先定义一个超级素数,素数是2 3 5.。。 而超级素数是在所有的素数中编号也是素数的,比如3 5 (编号是2, 3),给出一个数n~10000,如果这个数不能只用超级素数的和表示,输出0,如果可以,输出个数最少的情况。 题解:首先筛素数,然后根据素数搞出来超级素数。之后能否达到n,其实就是用已经原创 2015-03-10 22:25:25 · 465 阅读 · 0 评论 -
poj 1948 Triangular Pastures
题目链接 题意:给出n~40个木棍的长度l~40,要求用这些木棍组成一个三角形,必须全部用上,求最大面积,不能组成输出-1。 题解:组成一个三角形,枚举一条边有多长,还要枚举另一条边有多长,还要看存在不存在,显然就是dp,而且复杂度也行(第三条边就是tot-i-j)就行了。重点注意和的上限是1600,但是只有一个能够大于800,不可能两个同时大于800,可以作为dp的值,所以,dp【800】【原创 2015-03-13 11:17:47 · 308 阅读 · 0 评论 -
uva 10817 - Headmaster's Headache
题目链接 题意:某个学校要师资力量不够,要招收新的老师,第一行给出s~8,课程门数、m~20,必选老师、n~100可选老。,现在在任的老师有m个,然后给出m行表示每个老师的信息,分别是该老师的工资,以及可教授的课程(个数不一定),然后在n行表示可招收的老师信息,同样是工资和课程。问,最少花多少钱可以使得该学校开设的s个课程每个课程有两个老师任教。 题解:每门课有两个老师教,只有8门,状压,但是原创 2015-03-13 11:35:55 · 377 阅读 · 0 评论 -
Billy, Willy and Moscow Underground
题目描述:B. Billy, Willy and Moscow UndergroundTime Limit: 1000msMemory Limit: 262144KB 64-bit integer IO format: %I64d Java class name: (Any) Submit Status PID: 49352 Input/Output: standard input/o原创 2015-10-09 15:02:15 · 434 阅读 · 0 评论 -
hdu5534 Partial Tree
题目描述:Partial TreeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 222 Accepted Submission(s): 133Problem Description In mathematics, and m原创 2015-11-04 17:11:58 · 524 阅读 · 0 评论 -
codeforces 317 B. Minimization
题目描述:You’ve got array A, consisting of n integers and a positive integer k. Array A is indexed by integers from 1 to n.You need to permute the array elements so that value (就是错k个相减)became minimal pos原创 2015-09-09 11:50:08 · 369 阅读 · 0 评论 -
poj2836
题目描述:用面积和最小的矩形来覆盖给出的点,求最小的面积。预处理。题解:很好的一道题.用状压来表示哪些点被覆盖过了.之后就是用什么矩形来覆盖?因为矩形的先后顺序没有关系,因此当所有备选矩形出来之后就类似一个背包,矩形:所有两个点组成的矩形,最优解一定可以拆分成这样.因为这道题的特例,面积为0的不算,那么如果两个点在一条直线,必须把长或者宽从0变成1.并且顺便变就行(因为如果会影响到最终答案,一定有另原创 2015-06-26 16:03:18 · 399 阅读 · 0 评论 -
POJ - 2229
用2的幂次构成题目描述:一个数n~1e6.只能够用2的幂次(1, 2, 4….)来构成,问构成的方法有多少.题解:方法有多少?如果可以dp就好了.发现只剩下了log的时间可以应用了.这样减少规模dp,想法,都是2的幂次,如果能够除以2是什么情况.但是有一.那么:如果n是奇数,一定有1,如果把1拉出来,剩下的其实就是dp[n-1].如果n是偶数,如果有1,那么也是dp[n-1],如果没有1,那么就是除原创 2015-06-23 14:48:48 · 314 阅读 · 0 评论 -
背包整理模板
一 01背包 1. hdu5230,1~n连续的数每个数只能用一次,构造出和为i(在1到n范围),本来dp是dp【】【】用到哪个数,变式,用的数最多少于sqrt(n),dp【】【】i个数,和为j,然后dp转移。 2. 一共20个人,每次9 3 1的打,每人hp上限60。本身不是背包,但是搞出用9和 3 和 1分别多少次来dp很好的描述结果,中间的转移枚举+限制就好。 3.原创 2015-05-26 10:03:08 · 324 阅读 · 0 评论 -
hdu 5230
ZCC loves hacking题目描述:其实就是给了n~100000,c,l,r,其中C≤L≤R题解:所有情况数,刚开始一定会想dp【i】【j】用到数i达到和j的背包的算法,但是发现太大了。而且没有很好的利用1到n连续的性质。怎么用呢?不能用组合数推,那么还是想办法用dp,只是要改变一下定义状态,这个思想很重要。dp【i】【j】,用i个数达到和j的总个数。只用一个和不能够描述,加上用了几个数,因原创 2015-05-16 23:34:05 · 305 阅读 · 0 评论 -
TC SRM div2 500
打小兵 --- [jihi](safdsadfasd) #### 题目描述: #### 题解: #### 重点: ####代码: ``` #include <iostream> ```原创 2015-05-07 16:47:26 · 398 阅读 · 0 评论 -
寒假集训——The Fewest Coins
题目链接 题意:总价钱是T~10000,有n~100种硬币,每个都有一个val~120, 并且我有每种硬币c【i】~10000个,现在给老板一些钱,老板还会找回来一些钱,使得他收到t的钱,使得我给的钱的硬币个数加上老板找回来的硬币个数是最少的,求最少的总个数。老板会用完全背包的最少来找 题解:这题目首先自己是多重背包,用2进制搞就行,老板是完全背包。但是上线怎么确定,就是说我最多给老板多少钱就原创 2015-03-10 15:56:13 · 344 阅读 · 0 评论 -
POJ 2923 Relocation
题目链接 题意:一共有两个车,容量是c1和c2~100, n~10个物品,都有一个重量,两辆车每次必须一块从起点开到终点,问怎么安排能够使开的次数最少。 题解:问的是使开车的次数最少,考虑最后一次开车把什么带走,枚举,就是装压,那么之前呢?就是根据装压的01背包。首先需要将10个东西的状态判断下可以一次用两辆车拉走的情况预处理出来(这个预处理比较简单,用dp来写),作为之后dp的物品,然后之后原创 2015-03-10 15:03:54 · 319 阅读 · 0 评论 -
uva 10306 - e-Coins
题目链接 题意:100组数据,给出m~40和s~300, 再给出m种电子硬币,每种硬币有两种金额xi,yi。现在要在m种硬币种选若干个硬币,可以重复选同一种硬币, 使得(x1 + x2 + .... + xn) ^ 2 + (y1 + y2 + ... + yn) ^ 2 == s * s, 要求n尽量小,(n为选取硬币的个数), 如果不能选出满足条件的硬币,输出-1。 题解:很简单,就是dp原创 2015-03-27 23:24:41 · 344 阅读 · 0 评论 -
uva 10280 - Old Wine Into New Bottles
题目链接 题意:现在有L~1e6升酒,以及n~100种酒瓶,现在给出每种酒瓶的最大容量(325~4500),并且再给出最小容量,为最大容量的99%~95%,每种酒瓶可以使用无限多次,问,怎样装酒,可以使得剩下的酒(即未能装进酒瓶中的酒)最少,输出最小值。 题解:1e6的容量,每个大小容量的瓶子都试一下~4500,一定会超时。但是连续区间【l,r】的连续区间完全背包可以看做一个背包,就是因为:k原创 2015-03-27 23:05:23 · 306 阅读 · 0 评论 -
选课
题目链接 题意: 学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。学校开设了N(N 在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修。例如《Frontpage》必须在选修了《Windows操作基础》之后才能选修。我们称《Windows操作基础》是《Frontpage》的先修课。每门课的直接先修课最多只有一门原创 2015-03-07 23:45:45 · 485 阅读 · 0 评论 -
寒假集训——AreYouBusy
题目链接 题意:n~100组工作,有的组必须选一个去做,有的组最多选一个去做,有的组随意,t~100个时间,每个工作有一个花费时间和一个收益,求收益最大是多少。 题解:不同组的不同方式处理,必须选一个,那么就强制先选一个,但是会有没办法强制选的(时间太少)情况,所以先所有都设为INF,然后对每一个物品,可能是第一次选,可能是接着上次的选;最多选一个,每次都用上次的更新;而随便的就是01背包。不原创 2015-03-08 22:32:45 · 310 阅读 · 0 评论 -
寒假集训——Find Metal Mineral
题目链接 题意:给出一颗生成树,1 题解: 树形dp,关键是dp[u][i],i的定义,因为机器人可能从子树再跑回来,然后为了避免重复讨论,应该定义为:在u为根的子树上停了几个机器人.这样定义肯定不会重复,重点就是之后的横着怎么dp过去.考虑最后一个,枚举它:如果是0,那么一定是只有一个机器人进来然后绕了一圈走了,可以反证.如果是1,一定是1个,反证可以,之后i个就是i..... 然后就能这样原创 2015-03-08 11:27:09 · 704 阅读 · 0 评论 -
寒假集训--Video Game Troubles
题目链接 题意:n个平台,n~50,一共有v~100,000的钱,每个平台都有一定的花费,以及一定的所带游戏个数,个数~10,并且每个游戏也有花费,并可以带来一定收益。只有买了平台才有资格买上面的游戏,问怎么弄受益最大。 题解:分组背包,并且是依赖背包。一个平台是一组,原创 2015-03-08 21:51:25 · 339 阅读 · 0 评论 -
uva 10163 - Storage Keeperst
题目链接 题意:给出n~100为仓库的数量, 给出m~30为有守夜人的数量, 然后给出m个数值,为对应守夜人应付的酬劳,每个守夜人的能力与他需要的酬劳是相等的,并且守夜人可以同时负责多个仓库的安全,不过这样子安全值就变为val[i]/k(val[i]表示第i个守夜人的能力值,k表示他负责的仓库数量, /为取int整),先在要的出方案,先使得所有仓库中安全值最低的那个仓库的安全值越高, 并且要使得原创 2015-03-19 23:07:04 · 456 阅读 · 0 评论 -
POJ - 3039 MARGARITAS ON THE RIVER WALK
题目连接 题意::给定 n 件物品和一个背包,第 i 件物品的体积为 Vi,背包的容量为 C。 要求把一些物品放入背包使得剩下的物品都放不下,求方案数。 要求复杂度:n*C. 题解:考虑剩下的物品放不下,就是说用最小的也不能放下,所以枚举最小的是谁,然后比这个最小的小的必须要放下,而比最小的大的用0,1背包来算可能情况。枚举最小的同时,dp一直递推过去,而不是一直重算。 重点:理解放不下,枚原创 2015-03-03 11:26:22 · 434 阅读 · 0 评论 -
10313 - Pay the Price
题目链接 题意:一直都有0~300这300种价值的金额。 现在有n~1000次询问: 可能给出参数: 以下的n~300 1个:n, 输出可以组成价值n的方式的个数。 2个:n, a输出用硬币个数小于a的价值组成价值n的方式的个数。 3个:n, a, b输出用硬币个数大于a和小于b组成价值n的方式的个数。 题解:每次都要有个数的体现,那么就dp【300】【300】,一定不会多于300原创 2015-03-27 23:31:56 · 353 阅读 · 0 评论 -
10404 - Bachet's Game
题目链接 题意:由一堆石子, 给出石子的总数n~1e6, 接下来由stan和ollie两个人玩游戏,给出m, 在给出m~10种取石子的方法(即为每次可取走石子的数量),由stan先,两人轮流取走石子,最后一个将石子全部去完的人胜利,问, 给出的一堆石子, 两人均按最好的方案游戏, 最后将会是谁胜 ? 题解:本来是一个标准的sg函数的题目,1e6*10也能过。sg【0】,之后sg【i】枚举i取一原创 2015-03-27 23:41:10 · 351 阅读 · 0 评论 -
POJ 2392 Space Elevator 和 HDU3466 Proud Merchants
HDU3466的题目链接 题意:2392和3466都是在有01背包的同时也有额外的限制,2392是木板搭天梯,每种木板有一个高度限制,木板的任何地方都不能超出这个高度,而3466是买东西,但是买某一件东西是时,要求拥有的钱多余某个数(买之前的钱)。 题解:这两个问题类似,都是在结果中本来没有顺序的差别,但是因为有了新的限制,有了使用物品先后顺序的差别。考虑最优的结果,一定是容易购买的在后面才买原创 2015-03-10 14:18:42 · 410 阅读 · 0 评论 -
POJ——3181Dollar Dayz
题目链接 题意:输入n~1000,和k~100,问将n用1到k这k个数字进行拆分,有多少种拆分方法。例如:n=5,k=3 则有n=3+2,n=3+1+1,n=2+1+1+1,n=2+2+1,n=1+1+1+1+1这5种拆分方法。 题解:这是一个完全背包,思考最后一个数字用什么填就能发现。但是发现这个最终结果大于longlong,可以试下边界数据,但是只是比longlong大一点,所以用2个lo原创 2015-03-10 14:09:16 · 344 阅读 · 0 评论 -
Poj1787 Charlie's Change
题目链接 题意:给定一个数p,要求用四种币值为1,5,10,25的硬币拼成p,并且硬币数要最多,如果无解输出"Charlie cannot buy coffee.",1 题解:要求硬币最多,典型的多重背包用2的幂次来解,这个可以搞,注意怎么输出方案就行。而本题特殊的是可以用used额外记录当前最少使用当前的个数,刚好和dp的状态是一致的(先把硬币按照从小到大)原创 2015-03-09 23:21:38 · 414 阅读 · 0 评论 -
寒假集训——Gift Hunting
题目链接 题意:买东西,有两张购物卷,v1~500,v2~50,物品分两类,一类必须买,一类选择买,并且有一次免费买东西的机会,n~300个东西。问怎么买可以最大,显然两个卷不能混着用。 题解:dp【i】【j】【k】,i和j是钱数,k表示额外的奖励,0代表没用,1代表用过了。两类物品,必须买就一定要选,选择买就是01背包。dp要倒着推(01背包),并且根据k分开写方程。 重点:多维背包,01原创 2015-03-08 22:46:45 · 494 阅读 · 0 评论 -
POJ 2184 Cow Exhibition
题目链接 题意:给出num(num 题解:直观感受就是平衡,想要s就可能会f带来很大的负值,这样就是用背包dp的最标准的情况,把一维当做dp数组的维数(比如s),然后将f当做第二维,在同样的s下要最大的f。但是不同的是有两点:数组中加一个key平衡值,用来表示s的负数情况,第二:01背包更新体积的时候,如果当前的s是正的话,倒着扫,如果是负的话,正着扫,满足01背包。 重点:需要平衡两个值,原创 2015-03-10 15:50:10 · 298 阅读 · 0 评论 -
HDU 2639 Bone Collector II
题目链接 题意:有一个背包,体积v~1000,n~100个物品,第k~30大,物品都有体积和价值,求背包的第k大的价值。并且要求价值一样但是方式不一样的算作是一种价值,就是k个价值是严格不一样的。 题解:基本的第k大的01背包。dp多一维,在dp方程时,还是先扫物品,然后更新j,但是更新j不是一个式子了,需要弄k个:考虑不使用当前i的前k大,在考虑强制使用当前i的前k大,最后总和排重出一个前k原创 2015-03-10 15:17:22 · 294 阅读 · 0 评论 -
HDU 1059 Dividing
题目链接 题意:价值分别为1,2,3,4,5,6的物品个数分别为a[1],a[2],a[3],a[4],a[5],a[6],问能不能分成两堆价值相等的。 题解:分成价值相等的两堆,价值是多少?一半,然后就能够用背包看能不能凑出来。 #include #include #include #include #include #include #include #include #原创 2015-03-10 15:00:04 · 291 阅读 · 0 评论 -
金明的预算方案
题目链接 题意:金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的 如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属原创 2015-03-08 11:15:30 · 564 阅读 · 0 评论 -
Epic Fail of a Genie
题目描述:E. Epic Fail of a GenieTime Limit: Unknown msMemory Limit: 65536KB 64-bit integer IO format: %I64d Java class name: (Any) Submit Status PID: 49355 Input/Output: standard input/outputAladdin原创 2015-10-09 15:19:20 · 372 阅读 · 0 评论