ACM-动态规划-背包
暗金色
这个作者很懒,什么都没留下…
展开
-
HDU - 3033 I love sneakers!(有限制的背包)
题目大意:有N类物品,要求每类物品至少买一个,问能得到的最大价值是多少解题思路:可以用二维DP解决,只能能转化的就转化取最大值 注意:价值和花费有可能为0,所以写的时候要注意顺序正常二维数组#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 10010;int n,原创 2015-09-24 21:30:00 · 378 阅读 · 0 评论 -
UVA - 10130 SuperSale 01背包问题
题目大意:有N件商品,没件商品都有相应的质量和原创 2014-11-11 23:40:21 · 665 阅读 · 0 评论 -
POJ - 1252 Euro Efficiency(正负背包)
题目大意:给出6种硬币的价值,问交易的时候,如何组出0-100的值,且组成的次数最小(比如有1 5 10 20 25 50的硬币,价钱为15的时候,你有两种选择,一种是给出5和10两种硬币,另一种是给25,然后让店家找10,两种情况的组成次数都是2)求出平均组成次数和最多需要几次才能组出解题思路:先正的背包一次,表示每次的组成都是自己掏的钱,然后负的再背包一次,表示店家找钱的情况#include <原创 2015-09-19 10:25:24 · 484 阅读 · 0 评论 -
UVA - 624 CD(01背包+路径纪录)
题目大意:你有一张光盘,光盘上最多能播放M分钟。现在有N首歌,给出每首歌的时间,问如何挑选,才能使光盘的利用率达到最大解题思路:01背包+路径纪录,路径纪录时可以用类似回溯的方法#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 100010;int n, m, S原创 2015-09-19 10:03:31 · 420 阅读 · 0 评论 -
POJ - 3624 Charm Bracelet (01背包)
题目大意:你有一个体积为V的包。现在有出N件物品,每件物品都有相应的value和weight,问如何装物品,才能使价值最大解题思路:01背包裸题#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 13000;const int M = 3500;int n, m;原创 2015-09-19 09:59:03 · 375 阅读 · 0 评论 -
UVA - 10465 Homer Simpson 01背包问题(无限)
题目大意:有两种汉堡,吃第一个原创 2014-11-11 23:45:29 · 701 阅读 · 0 评论 -
UVA - 624 CD 01背包问题
题目大意:有一张光碟,要求播放的时间和尽量接近N,原创 2014-11-11 23:36:39 · 974 阅读 · 0 评论 -
UVA - 562 Dividing coins 经典01背包
题目大意:给出一系列硬币,要求分给两个人,两个人原创 2014-11-11 00:28:46 · 731 阅读 · 0 评论 -
UVA - 147 Dollars(完全背包)
题目大意:给出11种硬币的价值,非别为100,50,20,10,5,2,1,0.5,0.2,0.1,0.05 现在给出一个数,问这个数有多少种组成方式解题思路:有小数的话,比较麻烦,所以先转成整数,然后就是完全背包问题了#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace原创 2015-09-19 10:31:06 · 365 阅读 · 0 评论 -
HDU 5464 Clarke and problem(01背包)
题目大意:给出N个数,问有多少种组成方式,使得组成的数为P的倍数解题思路:先将所有的数取余,如果余数为负数的话,就加上p dp[i][j]表示的前i个数,组成的余数为j的方法有多少种 然后就是背包为题了#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1010;原创 2015-09-19 21:48:17 · 468 阅读 · 0 评论 -
POJ - 2923 Relocation(BFS+状态压缩)
题目大意:有一个人要搬家,他要把N件家具搬到新家,给出每件家具的重量 现在他有两辆货车,载重分别为c1和c2,每次都是两辆货车一起出发,问至少要多少趟才能搬完解题思路:先预处理出每辆货车的能搬的货,用二进制表示 接着BFS,每次找出当前状态能转移的状态即可#include <cstdio>#include <cstring>#include <queue>using namespace s原创 2015-09-22 23:32:19 · 413 阅读 · 0 评论 -
HDU - 3008 Warcraft0(完全背包)
题目大意:有N个技能,每个技能耗蓝Ai,对boss造成Bi的伤害,每秒只能释放一个技能,或者进行普通攻击,普通攻击对boss造成1点伤害,耗蓝为0 现在你每秒能回k点的蓝,初始蓝量和血量都是100,boss初始血量为100,每秒对你造成Q点伤害 问你能否干掉boss,且花费的时间最少解题思路:dp[i][j]表示第j秒,蓝量为i时,对boss造成的最大伤害 接着暴力DP即可#include <原创 2015-09-24 21:12:03 · 464 阅读 · 0 评论 -
HDU - 1864 最大报销额(01背包)
题目大意:现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。 解题思路:先把能报销的取出来,然后进行01背包即可 因为价值是小数,小数位后面最多有两位,那就将其转成整数(扩大100倍),然原创 2015-09-24 21:01:29 · 443 阅读 · 0 评论 -
HDU - 1494 跑跑卡丁车(BFS+DP)
题目大意:跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。这款游戏的特别之处是你可以通过漂移来获得一种 加速卡,用这种加速卡可以在有限的时间里提高你的速度。为了使问题简单化,我们假设一个赛道分为L段,并且给你通过每段赛道的普通耗时Ai和用加速卡的耗时Bi。加速卡的获得机制是:普通行驶的情况下,每通过1段赛道,可以获得20%的能量(N2O).能量集满后获得一个加速卡(原创 2015-09-24 20:56:23 · 848 阅读 · 0 评论 -
HDU - 1203 I NEED A OFFER!(01背包)
题目大意:Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不原创 2015-09-24 20:51:37 · 483 阅读 · 0 评论 -
HDU - 1059 Dividing(完全背包+多重背包)
题目大意:有6种硬币,价值分别是1,2,3,4,5,6。现在给出每种硬币的数量,问能否均分,使得两个人得到的价值一样解题思路:如果能得到平均数,就表示能均分 考虑一下两种情况,如果价值*数量>=平均数/2,那就可以当成完全背包来考虑了 反之,就得当成多重背包考虑#include <cstdio>#include <cstring>using namespace std;const int原创 2015-09-23 00:00:31 · 431 阅读 · 0 评论 -
HDU - 4281 Judges' response(MTSP)
题目大意:有n个点,第一个点是裁判的位置,其他的点是参赛者的位置。现在每个参赛者都要求裁判来答疑,裁判需要花Ci分钟对第i组进行答疑。已知每个裁判最多答疑M分钟,如何分配,才能使答疑的裁判的人数达到最少,如果可以分配的话,请求出裁判需要走的距离和的最小值解题思路:状态压缩,然后预处理一下一个裁判的能答疑的组别 要判断需要多少个裁判的话,可以用背包+状压来解决 设dp[i]表示答疑i状态的组别需要原创 2015-09-22 17:34:50 · 507 阅读 · 0 评论 -
HDU - 2191 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活(多重背包)
题目大意:急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。 请问:你用有限的资金最多能采购多少公斤粮食呢? 解题思路:多重背包模版题#include <cstdio>#include <algorithm>#include <cstring>原创 2015-09-22 23:57:34 · 616 阅读 · 0 评论 -
HDU - 2639 Bone Collector II(第K大01背包)
题目大意:求第k大的01背包(相同价值的去掉)解题思路:还是按照01背包的思路来,不过数组要多加一维,另一维表示的是第几大 状态转移的时候,用两个数组纪录一下转移的的大小:一个纪录的是放该物品的第k大的价值,另一个纪录的是不放该物品的第k大的价值接着再把这两个数组比较一下,取到所需数量的价值即可#include <cstdio>#include <cstring>#include <algor原创 2015-09-22 23:37:54 · 464 阅读 · 0 评论 -
POJ - 1384 Piggy-Bank(01背包)
题目大意:有一个存钱罐,初始重量为E,放完硬币后的重量为F。给出N种硬币,每种硬币都有相应的重量和价值,问这个存钱罐中的钱最少是多少解题思路:01背包为题,只不过最大值变成了最小值而已,以体积为限制#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 510;cons原创 2015-09-19 10:19:28 · 361 阅读 · 0 评论 -
POJ - 2063 Investment(01背包)
题目大意:有M的钱,要将这M的钱拿去存,给出N的存储方式,存储方式为,存K元一年,获利P元 现在要将这些钱存Y年(可以每年的存储方式都不同,获利的钱,可以接着时候),问Y年后的能得到的钱的最大值解题思路:按年来进行背包,求出每一年能获得的最大值,然后累加上去(因为每年的存储方式都可以不同),继续背包#include <cstdio>#include <cstring>#include <alg原创 2015-09-19 10:16:27 · 417 阅读 · 0 评论 -
POJ - 1787 Charlie's Change(完全背包和路径纪录)
题目大意:给出五种硬币的价值和数量,问如何用最多的硬币组成另一个数解题思路:完全背包问题加纪录路径#include <cstdio>#include <cstring>const int N = 10010;int val[4] = {1, 5, 10, 25};int dp[N], path[N], use[N], num[4], ans[30];int n;void solve() {原创 2015-09-19 10:35:11 · 476 阅读 · 0 评论 -
HDU - 1171 Big Event in HDU(多重背包或BFS)
题目大意:有N种物品,每种物品有相应的数量和价值 现在要求你讲这些物品分配给两个人,使得这两个人分配到的物品的价值差最小解题思路:这题我用的是bfs,暴力求出能得到的所有状态,最后再判断一下即可#include <cstdio>#include <cstring>#include <queue>using namespace std;const int N = 250010;const原创 2015-09-18 08:57:58 · 392 阅读 · 0 评论 -
HDU - 3732 Ahui Writes Word(多重背包)
题目大意:给出N个单词的花费和价值,问在最多花费M的情况,能得到的最大价值解题思路:因为花费和价值都在[0,10],所以将其压缩,不然的话,N太大了,直接背包会超时 接着就是完全背包问题了#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 10010;int num原创 2015-09-24 21:21:36 · 421 阅读 · 0 评论 -
HDU - 2844 Coins(多重背包)
题目大意:给出N中硬币的价值和数量,问[1-m]有几个数能用硬币组成解题思路:多重背包裸题#include <cstdio>#include <cstring>const int M = 100010;const int N = 110;bool vis[M];int val[N], num[N];int n, m;void ZeroOnePack(int w) { for (in原创 2015-09-24 21:18:52 · 327 阅读 · 0 评论 -
HDU - 1574 RP问题(01背包)
题目大意:在人类社会中,任何个体都具有人品,人品有各种不同的形式,可以从一种形式转换为另一种形式,从一个个体传递给另一个个体,在转换和传递的过程中,人品不会消失,也不被能创造,这就是,人品守恒定律! 人品守恒定律更形象的描述,当发生一件好事,你从中获利,必定消耗一定量RP;当发生一件不幸的事,你在其中有所损失,必定积攒一定量RP。 假设在一个时间段内在你身上可能会发生N个事件,每个事件都对应原创 2015-09-24 20:59:02 · 490 阅读 · 0 评论 -
HDU - 3496 Watch The Movie(01背包)
题目大意:有N个碟片,你只能选择M个进行播放,最多能观看L分钟。给出每个碟片的播放时间和看完后能收获的快乐值,问能否看完这M个碟片,如果能全部看完的话,输出最大快乐值解题思路:用dp[i][j]表示i分钟看完j个碟片的最大快乐值,然后背包即可#include <cstdio>#include <cstring>#include <algorithm>using namespace std;c原创 2015-09-24 21:16:26 · 433 阅读 · 0 评论 -
HDU - 1881 毕业bg(01背包)
题目大意:每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”。参加不同团体的bg会有不同的感觉,我们可以用一个非负整数为每个bg定义一个“快乐度”。现给定一个bg列表,上面列出每个bg的快乐度、持续长度、bg发起人的离校时间,请你安排一系列bg的时间使得自己可以获得最大的快乐度。 例如有4场bg: 第1场快乐度为5,持续1小时,发起人必须在1小时后离开; 第2场原创 2015-09-24 21:03:59 · 561 阅读 · 0 评论 -
HDU - 3449 Consumer(有依赖的背包问题)
题目大意:有N个箱子,每个箱子需要花费Ai的代价 箱子里面有K个物品,K个物品你可以选择买任意个,但每个物品只能买一个,每个物品有相应的花费和价值 你又M的钱,最多能得到多少价值解题思路:这题我用滚动数组 先处理出买了当前箱子的情况,然后在买了当前箱子的情况下,在进行01背包,具体可以看代码#include <cstdio>#include <cstring>#include <algor原创 2015-09-24 21:26:09 · 697 阅读 · 0 评论 -
HDU - 3535 AreYouBusy(混合背包)
题目大意:有N类人物,给出每类任务的限制 限制为0时:表示至少要完成1项 限制为1时:表示至多完成1项 限制为2时:可以随意完成问在给定的限制能,完成这些任务所能得到的最大价值解题思路:混合背包裸题#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 110;in原创 2015-09-24 21:32:41 · 493 阅读 · 0 评论 -
HDU - 2182 Frog(01背包)
题目大意:有一只青蛙,刚开始在1这个位置,它只能往前跳,且跳跃的距离在[A,B],最多跳K次。它只能把它所在位置的蚊子吃了,问最多能吃多少只蚊子解题思路:01背包裸题#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int n, a, b, k;int n原创 2015-09-24 21:07:02 · 427 阅读 · 0 评论 -
HDU - 2546 饭卡(01背包)
题目大意:电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 解题思路;按照贪心的思想,菜的价格就要从小到达排,因原创 2015-09-17 23:52:13 · 505 阅读 · 0 评论 -
UVA - 674 Coin Change(完全背包)
题目大意:有五种硬币,价值分别为50,25,10,5,1 现在给你一个数,问有多少种组成方式解题思路:完全背包裸题#include <cstdio>#include <cstring>using namespace std;const int N = 7500;int val[5] = {1,5,10,25,50};int n;int dp[N];int main() { wh原创 2015-09-19 10:27:37 · 448 阅读 · 0 评论 -
POJ - 2184 Cow Exhibition(01背包)
题目大意:有N个牛,给出每头牛的兴奋度和幽默感,问如何挑选牛,才能使得兴奋度+幽默感的和达到最大,且使兴奋感的和,幽默感的和非负解题思路:01背包问题,不过这题要排一下序,我是按兴奋度从大到小排序的,这样能保证非负 用dp[i]表示兴奋度为i时,幽默感能达到的最大值#include <cstdio>#include <cstring>#include <algorithm>using nam原创 2015-09-19 10:09:54 · 441 阅读 · 0 评论 -
UVA - 562 Dividing coins(01背包)
题目大意:给出N种硬币和每种硬币的价值,现在问如何分这些硬币,使得两人得到的硬币价值差达到最小解题思路:求出能达到的每种状态,然后从中间往左右扩#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define abs(x)((x)>0?(x):(-(x)))const int N = 500原创 2015-09-19 10:05:54 · 459 阅读 · 0 评论 -
POJ - 3260 The Fewest Coins (完全背包)
题目大意:有N种硬币,给出每种硬币的价值和数量 现在要买一样东西,东西的价值为W,要求用最少的硬币去买解题思路:先排序,从小到达排序,然后进行完全背包,背包的时候用另一个数组纪录一下该硬币已经用了多少个了#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 110;原创 2015-09-19 10:43:47 · 426 阅读 · 0 评论 -
HDU - 2159 FATE(01背包)
题目大意:最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗?解原创 2015-09-18 08:50:17 · 358 阅读 · 0 评论 -
HDU - 3466 Proud Merchants(01背包)
题目大意:有N件东西,M的钱 要买一件东西的话,就要花费P的钱,且当前所拥有的钱不能少于Q,买了该商品的话,可获利V 问最大获利是多少解题思路:按照贪心的思想来看的话,应该是限制最高的东西先买,或者花费最低的东西先买,这样的话,就排个序 按(限制-花费)的从大到小排序 接下来就是01背包的问题了dp[i]表示的是花费了i的价钱能得到的最大价值#include <cstdio>#includ原创 2015-09-17 23:57:40 · 466 阅读 · 0 评论 -
HDU - 2602 Bone Collector(01背包)
题目大意:给出N件物品的价值和体积,现在你有一个体积为V的背包,问装载背包的最大价值是多少解题思路:01背包裸题#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1010;int value[N], volume[N], dp[N];int n, m;void i原创 2015-09-17 23:59:41 · 373 阅读 · 0 评论 -
HDU - 2955 Robberies(01背包)
题目大意:给出N个银行里存放的钱和抢劫了该银行被捕的概率 要求你找出能抢劫的最多的钱,且被捕概率要小于等于Q解题思路:01背包问题 用dp[i]表示抢劫了i的钱,没有被捕的最大概率 则转移方程为 dp[i] = max(dp[i], dp[i - val] * (1 - cost)) 其中的1-cost表示的是不被捕捉到的概率#include <cstdio>#include <cstr原创 2015-09-18 08:54:46 · 443 阅读 · 1 评论