背包问题
sumi
无冥冥之志者无昭昭之明 无惛惛之事者无赫赫之功!
有问题欢迎大家联系我,扣扣2513822561
展开
-
hdu 1248 寒冰王座(很水的完全背包)
题目分析:很水的完全背包!!!#include#includeusing namespace std;int dp[10100];int main(){ int n,t; scanf("%d",&t); while(t--) { scanf("%d",&n); int w[4]={0,150,200,350}; memset(dp,0,sizeof(d原创 2012-04-25 19:07:06 · 566 阅读 · 0 评论 -
hdu 3591 The trouble of Xiaoqian(多重背包+完全背包)
参考别人的思路:http://blog.163.com/zjut_nizhenyang/blog/static/1695700292011212101659204/hdu 3591 The trouble of Xiaoqian 多重背包+完全背包题意:货币系统有 N 种不同面值的钱,每种钱的价值分别为 V1,V2,...,VN 一个人要买价值和为 T 的商品,他每种分别相应的原创 2012-04-07 19:45:40 · 727 阅读 · 0 评论 -
背包之01背包、完全背包、多重背包详解
背包之01背包、完全背包、多重背包详解 — Tanky Woo(2010.07.31)首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺转载 2012-04-06 16:26:58 · 508 阅读 · 0 评论 -
hdu 2639 Bone Collector II(01背包的 第K大解)
题目分析:参考http://hi.baidu.com/chenyun00/blog/item/f1c7ae545e9e2a491138c26b.html第K优解问题其基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里仍然以01背包为例讲解一下。首先看01背包求最优解的状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v原创 2012-04-30 09:40:41 · 619 阅读 · 0 评论 -
背包九讲 P03: 多重背包问题
P03: 多重背包问题题目: 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法 这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件转载 2012-04-14 08:59:11 · 418 阅读 · 0 评论 -
背包九讲 P01: 01背包问题
P01: 01背包问题题目: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是: f[i]转载 2012-04-13 14:20:18 · 392 阅读 · 0 评论 -
hdu 2546 饭卡(01背包+贪心)
题目分析:要想使剩余额最小,就要在就要用V=m-5的钱去买最多的菜,再用剩下的5元买最贵的菜;先对菜价按升序排序,再用V买前i-1件 物品,#include#include#includeusing namespace std;int w[2000];int dp[100000];int cmp(int a,int b){ return a<b;}int mai原创 2012-04-30 11:04:15 · 632 阅读 · 0 评论 -
hdu 3535 AreYouBusy(分组背包的变形---各种分组背包)
题目分析:0代表每组内的job至少取一件;1代表最多取一件;2代表可以自由取,就相当于对这一组内的job实行01背包......注意: 1. One job can be done only once.开始没注意到这句话,还以为每组内的每个job可以做多次....囧,,, 2.这个题花了我一天多的时间,最后看别人的解题报告才过的,,,,原创 2012-05-03 08:56:22 · 889 阅读 · 0 评论 -
hdu 3033 (分组背包---每组内至少取一件)
下面的代码是错误的:硬是检查不出啦那里错了,样例能过http://archive.cnblogs.com/a/1783879/这里讲的很详细,,,,//每一组内至少取一件/*程序思想:f[i][j]代表用j的价钱买前i个品牌可以得到的最大价值数。 赋初值:见18到22行 状态转移:f[i][j]可以经过三种状态得到———— f[i][j],原创 2012-05-03 15:14:26 · 969 阅读 · 0 评论 -
hdu 1114 Piggy-Bank(完全背包)
题目分析:给出了钱罐开始的重量e和装满后的重量f,然后给你n种硬币,每个价值为p,重量为w,求出最小的价值使钱罐的重量恰好为w如果不存在 输出This is impossible.状态转移方程:f[v]=min{f[v],f[v-w[i]]+p[i]}注意:一道简单的完全背包题(于0-1背包就是第二个for循环倒过来就行了),要求做的仅仅是求最小值,而不是最大值,那么只要对初始化进原创 2012-04-06 16:09:42 · 568 阅读 · 0 评论 -
hdu 1398 Square Coins(完全背包变形---求方案总数)
题目分析:有17种硬币 ,币值分别为1^2,2^2.......17^2, 给n代表总钱数,求用这个17种硬币拼成n的种类数可以用母函数做,也可以用背包做。。。套用的背包,见 背包九讲....//****背包#include#include#includeusing namespace std;int main(){ int n; __int64 dp[100原创 2012-05-10 08:37:05 · 791 阅读 · 0 评论 -
hdu 1284 钱币兑换问题(完全背包 变形---求方案总数)
题目分析:定义dp[i][j]是将前i种硬币放到价值为j的背包里的方法数.... 状态转移方程:dp[i][j]=sum(dp[i-1][j],dp[i][j-i]).........................具体件背包九讲初始化化:dp[i][0]=0, 价值为0的方法当然为1,就是什么都不放#include#includeusing namespace std;原创 2012-05-10 07:35:14 · 1083 阅读 · 0 评论 -
hdu 2189 悼念512汶川大地震遇难同胞——来生一起走(完全 背包变形--求方案总数)
题目分析:先筛选1到150以内的宿舍,放到a[num]中,再用完全背包求方案总数//************#include#include#include#includeusing namespace std;bool is_prime(int x){ for(int i=2;i<=(int)sqrt(x+0.5);i++) if(x%i==0) ret原创 2012-05-10 09:00:00 · 1986 阅读 · 0 评论 -
背包九讲 P02: 完全背包问题
P02: 完全背包问题题目: 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路: 这个问题非常类似于01背包问题, 所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、转载 2012-04-14 08:45:13 · 399 阅读 · 0 评论 -
hdu 1084 最大报销额(浙大研究生复试题)(01背包的变形)
题目分析:这道题就是求最大报销的钱数,相当于01背包,若能报销的单子时,在当前状态下要么选择这张单子,要么不选择,其状态方程为dp[j]=max(dp[j],dp[j-1]+money[i]);即报销j个发票所得到的最大经费,可以第j个是报销的,也可以是第j个不报销而最大经费是由前j-1个发票加上另外第i个发票的报销数额。注意:1.每个物品的最大报销额不能超过600.00,原创 2012-04-25 11:47:45 · 693 阅读 · 0 评论 -
hdu2062 Bone Collector(01背包)
题目分析:简单的01背包#include#includeusing namespace std;int f[1100];int w[1100],v[1100];int main(){ int t,i,j; cin>>t; while(t--) { int N,V; cin>>N>>V; for(i=1;i<=N原创 2012-04-09 17:44:45 · 638 阅读 · 0 评论 -
hdu 1881 毕业bg (01背包变形)浙大计算机研究生复试上机考试-2008年
题目分析:题目搞不懂呀,,参考了,http://blog.csdn.net/kyle_once/article/details/6198468,才弄明白,一直把离校时间,理解错了....吧bg当做物品,欢乐度当做价值,持续时间当做体积,离校时间当做容量,放入顺序是有顺序的,要按离校时间升序排序,定义dp[i][j],为吧前件bg安排到j时间内,所获得的最大欢乐度,dp[i][j]=ma原创 2012-04-26 13:06:48 · 1116 阅读 · 0 评论 -
背包九讲 P04: 混合三种背包问题
P04: 混合三种背包问题 问题:如果将P01、P02、P03混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?01背包与完全背包的混合:考虑到在P01和P02中给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时转载 2012-04-14 09:03:04 · 405 阅读 · 0 评论 -
hdu 1712 ACboy needs your help(很裸的分组背包,照着背包九讲套)
题目分析:有n门课程,A[i][j]表示第i们课程,用j天完成,可以得到的价值,用m天可以得到的最大价值;把每一行当做一组物品,时间耗时当做体积,m天当做容量,原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712#include#includeusing namespace std;int dp[10000],A[11原创 2012-04-27 22:35:58 · 795 阅读 · 0 评论 -
hdu 3496 Watch The Movie(二维费用的 01背包)
题目:有n集卡通,每一集的时间为t[i],价值为v[i],选择m集,要在l时间内看完,问如何选择可以使家孩子最大。分析:很裸的二维费用的背包,吧时间看成一维,集数看成一维,定义dp[i][j][k]为选择前i集,用j时间,看k集,所得的最大费用。状态转移方程为:dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-t[i]][k-1]+v[i]);初始化:dp原创 2012-04-22 22:26:01 · 544 阅读 · 0 评论 -
hdu 2639 Bone Collector II(01背包 第K大解)
题目分析:http://hi.baidu.com/chenyun00/blog/item/f1c7ae545e9e2a491138c26b.html又看别人的解题报告!!!!!!!第K优解问题 其基本思想:将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里仍然以01背包为例讲解一下。首先看01背包求最优解的状态转移方程:f[i][v原创 2012-04-27 14:45:40 · 139 阅读 · 0 评论 -
hdu 1171 Big Event in HDU(完全背包)
题目分析:很裸的完全背包!用sum做总价值之和,C=sum/2 做背包容量,另外用价值做背包的体积,就转化为多重背包,就是价值为w[i],体积v[i],数量为n[i]的N个背包放到容量为C=sum/2,的背包中,所的到 的最大价值,A所得的价值为sum-dp[C],B 为dp[C]#include#includeusing namespace std;int v[1010],w[原创 2012-04-19 20:08:36 · 507 阅读 · 0 评论 -
hdu 2159 FATE(二位费用的多重背包问题)
定义:dp[i][j][k]为杀前i种怪兽,打掉怪兽的数量为j,得到经验值为t,所用的最小忍耐度,显然,状态转移方程为 dp[i][j][k]=min(dp[i-1][j][k],dp[i-1][j-1][t-a[i]]+b[i])但是,少考虑了一点.....WA了几次:特别要注意的情况是可以杀死怪物取得经验值t大于升级所需的经验n,此时有可能牺牲的疲劳度是较小的(一开始考虑成每次升级都是原创 2012-04-19 15:24:39 · 448 阅读 · 0 评论 -
hdu 2955 Robberies(01背包)
题目:要去偷N家银行,要求被抓的概率小于P,每家银行可以偷mi元,被抓的概率为pi, 问在不被抓的情况下,能最多偷多少钱?分析:dp[i][j],为偷前i家银行,得到j元,没被抓的最大概率。转移方程为:dp[j]=max{ dp[j], dp[j-mi]*pi }注意初始化:偷0元,不被抓的概率为1,既然偷了,不被抓的概率为0......#include#includeus原创 2012-04-12 22:10:31 · 382 阅读 · 0 评论 -
hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
分析:很基本的 多重背包,套用背包九讲的思想和公式,化为ZeroOnePack和CompletePack做的,详细的分析见背包九讲复杂度为O(V*Σlog n[i])#include#includeusing namespace std;int dp[1100],p[1100],w[1100],c[1100];int n,m;void ZeroOnePack(int c原创 2012-04-07 10:46:34 · 876 阅读 · 0 评论 -
hdu 2844 Coins(多重背包+二进制优化)
题目分析:同http://poj.org/problem?id=1742,在hdu 能过,poj TLE....#include#includeusing namespace std;const int maxn=100010;int A[120],C[120],V[120],m;//A[]代表价值,C[]代表数量,V[]代表体积int dp[maxn];//dp[i]原创 2012-04-30 08:54:46 · 607 阅读 · 0 评论 -
hdu 1059 Dividing(多重背包)
题目:很六种岩石,每种的价值为1.2.3.4.5.6,每种的个数n[i],吧这些岩石分成两半,如果能分成价值相等的两半输出Can be divided.否则输出Can‘t be divided.分析:如果价值总和为奇数,直接输出can't,否则用V做总价值的一半,当做背包容量,再拿价值当做背包的体积,就是很明显的多重背包....注意: wa了好几次,就是因为OneZeroPack(in原创 2012-04-30 08:10:19 · 467 阅读 · 0 评论 -
hdu 1085 Holding Bin-Laden Captive! (多重背包变形)
题目分析:有三个硬币面值分别为1 ,2, 5 数量分别为num1,num2,num3 求用这些硬币不能拼成最小的币值1 2 5分别对应三种类型价值和容量相等分别为1 2 5的物品,把这些 背包放到容量sum=num1*1+num2*2+num3*5的背包里....状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-n[i].v]+n[i].v).......原创 2012-05-10 13:41:28 · 913 阅读 · 0 评论