背包问题
ITCharge
高效率编程,慢节奏生活。
展开
-
HDU1028 Ignatius and the Princess III【母函数】【完全背包】
题目大意: 给定正整数N,定义N = a[1] + a[2] + a[3] + … + a[m],a[i] > 0,1 <= m <= N。 对于给定的正整数N,问:能够找出多少种这样的等式? 思路: 对于N = 4, 4 = 4; 4 = 3 + 1; 4 = 2 + 2; 4 = 2 + 1 + 1; 4 = 1 + 1 + 1 + 1。 共有5种。N=4时,结果就是5。其实就是整数分解问题,可写出母函数 g(x) = (1+x+x^2+x^3+…)*(1+x^2+x^4+…)*(1+x^3+…)*(原创 2015-05-14 22:45:38 · 1117 阅读 · 0 评论 -
HDU2844_Coins【多重背包】【二进制优化】
题目大意:给你几种硬币的价值和数量,再给你一个最大钱数M,问你这些硬币能 组成价值1到M的值有多少种 思路:简单的多重背包,如果总容量比这个物品的容量要小,那么这个物品可以直 接取完,相当于完全背包。否则的话就转成01背包来求解。原创 2014-10-29 16:46:24 · 1197 阅读 · 0 评论 -
HDU2602_Bone Collector【01背包】
Bone Collector 题目大意:有一个骨头收藏家,他有一个容量为V的容器来收藏骨头。现在有N个骨头 各个骨头的价值为v[i],各个骨头所占容量为w[i]。问他在容量为V的容器里,最多能 收藏总价值为多少的骨头? 思路:简单的01背包原创 2014-10-20 16:53:50 · 760 阅读 · 0 评论 -
HDU1203_I NEED A OFFER!【01背包】
题目大意:Speakless有N万元,他要申请学校上学。总共有M个学校可申请, 每个学校都有申请费和申请概率,求他最少能获得一个学校名额的概率最大 为多大 思路:动态规划,用01背包做。需要注意概率的算法。至少申请上一个学校的 概率 = 1-(1-p1)(1-p2)(1-p3)… 其中,p1,p2,p3…为各个学校申请概率。 将N元当做背包总容量,学校当做物品。申请费为体积,不被申请上的概率当 做价值,转移方程就为 dp[j] = min(dp[j],dp[j-w[i]]*p[i]); 最终算得的dp[N原创 2014-10-22 10:34:28 · 1038 阅读 · 0 评论 -
HDU2159_FATE【二维费用背包】【完全背包】
FATE 题目大意:xhd要杀怪升级,他有一个忍耐值。每只怪都有一个经验值和需要 消耗的忍耐值。杀掉怪得到相应经验值,消耗掉相应忍耐值。 xhd最多能杀S 只怪,升级共需要N的经验值。若他的忍耐度掉到0,则他不会再玩游戏了。 输出他升完这一级,所能剩下最大的忍耐值。如果升不了级,则输出-1。 思路:背包中要存的东西肯定是经验,但是背包的容量不单是怪物数,还有忍 耐度。这样,把怪物数和忍耐度作为背包的二维容量。用两个循环,得到S个 怪,M容量值内得到的最高经验值。 最后遍历找出经验值高于升级经验值的最小消耗的原创 2014-10-23 15:06:07 · 956 阅读 · 0 评论 -
HDU2059_龟兔赛跑【DP】
题目大意:龟兔赛跑,总长度为N,兔子以恒定速度VR跑,乌龟骑电动车 跑,当电动车有电的时候最多跑C幂,有电的时候以VT1速度跑,没电的时 候以VT2的速度跑,已知路上有N个充电站,给你N个充电站离起点的距离。 每次充电需要T秒,问最终乌龟有可能赢得比赛吗? 思路:为了计算每个加油站距离下个充电站的距离,可将起点和终点看做是 充电站。这样总共就有N+2个充电站,序号为0~N+1。从第一个充电站到 第N+1个充电站,计算出从第0个充电站到第j个充电站在充满电的情况下跑 到第i个充电站的最短时间dp[i]。最终答原创 2014-11-27 08:51:45 · 1866 阅读 · 0 评论 -
HDU1059_Dividing【多重背包】【二进制】
题目大意:给你价值为1、2、3、4、5、6六种宝石的个数,把它按价值 平均分成两份,不能切割,不能分开。问是否能平分 思路:多重背包问题。先判断下宝石总价值是不是偶数,只有偶数才能平 分。若是偶数在用多重背包左。只要总容量为价值的一半的背包能装满就 能平分。多重背包用了二进制的思想。原创 2014-11-28 08:14:31 · 1159 阅读 · 0 评论 -
HDU-2546-饭卡-01背包-2014-04-28 12:44:06
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9569 Accepted Submission(s): 3297 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前原创 2014-04-28 12:43:17 · 1098 阅读 · 0 评论 -
HDU1864_最大报销额【01背包】
题目大意:基本能看懂,再说一下,给你N张发票,发票上只有A、B、C类物品能报销, 且一张发票最多报销1000元,A、B、C类商品每种都不能超过600元。给你一笔经费, 问符合报销的发票中,最多能报销多少钱。 思路:把价格*100转为整形,就可以把符合报销的发票作为物品,钱作为背包重量和价值, 总容量为经费。求这笔经费最多能报销多少钱。原创 2014-10-17 20:57:34 · 1143 阅读 · 0 评论 -
HDU2082_找单词【多重背包】
题目大意:每个单词都有一个值,从A、B…到Z的值分别为1、2…到26 现在给你26个字母每个字母的个数,问:能找到多少个字母总价值<=50 的单词数。(单词排列顺序无关,ACM和CMA和AMC都视为同一个单词) 思路:很多人都是用母函数做的,这里说下动态规划的思想。 把A、B…到Z看做26种物品,每种物品的价值为1、2…到26,每种物品的 个数有num[i]个。现有一个容量为50的背包,问有多少种装法,能满足背 包中总价值<=50 过程:开个二维数组,一维26个表示字母种类,二维50个表示价值。最后 从1-原创 2014-10-20 10:43:19 · 2522 阅读 · 0 评论 -
HDU1171_Big Event in HDU【01背包】
题目大意:有N种设备,每种设备有一个价值和数量。先要将这N种设备按总价值 尽可能的平均分给两个学院。若不能完全平均分,则第一个学院多分一点。 问,两个学院能各能分得多少价值的设备? 思路:每种设备都有一个数量和价值,可以把每一个设备都当做一件物品,比如第 一种设备有M件,价值为V则转换为有M件物品,价值都为V。这样就能转换成01 背包了。把总价值的一半当做背包容量。求最多能装多少价值的物品。因为在尽可 能平分的基础上第一个学院要多分一些。所以结果为第一学院分得sum-dp[sum/2], 第二学院分得dp[原创 2014-10-22 09:14:31 · 980 阅读 · 0 评论 -
HDU2955_Robberies【01背包】
Robberies 题目大意:有一个强盗要去几个银行偷盗,他既想多投点钱,又想尽量不被抓到。已知各个银行 的金钱数和被抓的概率,以及强盗能容忍的最大被抓概率。求他最多能偷到多少钱? 思路:背包问题,原先想的是把概率当做背包,在这个范围内最多能抢多少钱。 但是问题出在概率这里,一是因为概率是浮点数,用作背包必须扩大10^n倍来用。二是最大不 被抓概率不是简单的累加。二是p = (1-p1)(1-p2)(1-p3) 其中p为最大不被抓概率,p1,p2,p3 为各个银行被抓概率。 第二次想到把银行的钱当做背包,把原创 2014-10-17 19:33:49 · 3618 阅读 · 0 评论