摘要:题目http://www.rqnoj.cn/problem/160分析:这是一个01背包问题,对于每一道题目,都有两个选择"做"或者"不做"。但是唯一不同的是如果做,那么又有两种选择。因此多加了判断条件。二维的动态转移方程是: dp[i,j]=max{ dp[i-1,j], dp[i-1,j-c1[i]]+w1[i], dp[i-1,j-c2[i]]+w2[i] }将二维降维到一维: dp[j... 阅读全文
RQNOJ--2 开心的金明(01背包)
2013-12-04 17:36 by gongti, 156 阅读, 0 推荐, 收藏,
摘要:题目:http://www.rqnoj.cn/problem/2分析:这个题目每一种物品都是有"选"或"不选"两种情况。属于01背包问题。物品的价格相当于背包问题的"花费",限定的总钱数是"背包容量"。这里每种物品的效益就是 v[i]*p[i]。#include#includeint dp[30001],N;void ZeroOnePack(int c,int w){ for(int i=N;i>... 阅读全文
HDU--2844 Coins(多重背包)
2013-12-04 17:00 by gongti, 175 阅读, 0 推荐, 收藏,
摘要:题目http://acm.hdu.edu.cn/showproblem.php?pid=2844题目分析 给定N和M,N表示硬币的种类,M表示最大不超过的总价值,相当于背包的重量或体积等一类的限制条件。A[1....N]表示硬币的面值C[1....N]表示相应的硬币的数目。求能用这些硬币组合成多少种金额(金额在1~M之间)?转换为背包问题就是1~M中间的数值能否可以被组成。通常所做的背包是求最大值... 阅读全文
HDU--1171 Big Event in HDU(多重背包)
2013-12-04 13:07 by gongti, 123 阅读, 0 推荐, 收藏,
摘要:题目http://acm.hdu.edu.cn/showproblem.php?pid=1171分析:输入N种设备,已知设备的价值和数量。然后根据总价值将这批设备均分给两个计算机系。输出包括这两个系分别获得设备的价值,要求计算机系的价值不小于软件系。一个多重背包问题,将总价值的二分之一作为背包的容量,依次将设备选入背包。背包可以是不装满的。#include#includeint dp[260000... 阅读全文
HDU--1059 Dividing(多重背包)
2013-12-04 11:28 by gongti, 157 阅读, 0 推荐, 收藏,
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1059分析:有一堆石头2个人按照其价值均分,石头的价值分为六个等级1,2,3,4,5,6每一个等级有n[i]个石头也可能一个石头也没有。于是两个人按照总价值进行均分。因为每一个等级的石头个数是不等的n[i],这是一个多重背包的问题。可以将背包的容量看成是一个总价值的二分之一。并且要求装满。#includec... 阅读全文
HDU--2191 汶川地震购米(多重背包)
2013-12-04 09:47 by gongti, 181 阅读, 0 推荐, 收藏,
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2191分析:有资金n元,而市场有m种大米,每种大米价格不等,重量不等,数量不等,并且只能整袋购买。如何用有限的资金最多能采购多少公斤粮食呢?在这里价格相当与传统多重背包的“花费”而重量是“价值”。 dp[j]=max{ dp[j-k*c[i]+w[i]] | 0#includeint dp[110],n;... 阅读全文
PKU--1267 Cash Machine(多重背包)
2013-12-04 01:21 by gongti, 212 阅读, 0 推荐, 收藏,
摘要:题目http://poj.org/problem?id=1276分析 这是一个多重背包的问题,可以把请求的金额当作背包的重量,而货币的面值就是价值又是重量。于是这个问题便很好理解背包了。#include#includeint dp[100010];int cash;//01背包void ZeroOnePack(int cost,int weight){ for(int j=cash;j>=cost;j--) dp[j]=dp[j]>dp[j-cost]+weight?dp[j]:dp[j-cost]+weight;}//完全背包void CompletePack(int cost, 阅读全文
背包问题之多重背包
2013-12-04 01:11 by gongti, 341 阅读, 0 推荐, 收藏,
摘要:问题描述有N种物品和一个容量为V的背包,第i中物品最多有n[i]件可用。每一件的费用是c[i],价值是w[i]。求将哪些物品放入背包可以使得这些物品的费用总和不超过背包的容量,同时价值总和最大。问题分析这个问题的状态转移方程和完全背包的十分的相似,唯一改变的就是第i种物品只有1+n[i]种策略可选择。分别是0,1,2,....n[i]。 dp[i,v]=max{ dp[i-1,v],dp[i-1,v-k*c[i]]+k*w[i] }这《背包九讲》中将这个问题转换。基本思想就是将第i种分成若干份,使得第i中物品可取的每一种策略即取0,1,2,3.....n[i] 都可以等价的取若干份来代... 阅读全文
NYOJ--311(完全背包)
2013-12-03 17:30 by gongti, 159 阅读, 0 推荐, 收藏,
摘要:题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=311分析:这里就是一个完全背包,需要注意的就是初始化和最后的输出情况 dp[j]=max{ dp[j],dp[j-c[i]]+w[i] }#includeconst int INF=0XFFFFFF;int main(){ int N,M,V,c[2010],w[2010],dp[50000... 阅读全文
HDU--1114 Piggy-Bank(完全背包)
2013-12-03 16:47 by gongti, 212 阅读, 0 推荐, 收藏,
摘要:题目http://acm.hdu.edu.cn/showproblem.php?pid=1114翻译:一个存钱罐,不打破存钱罐,计算其里面最少多少钱。这是一个完全背包问题。因为每一种面额的钱都是可以无限次的使用。数据T为测试的个数。E和F分别为空存储罐的重量和装满钱后的重量。N为硬币种类个数,然后分别输入p[i]和w[i] (1#includeconst int INF=0XFFFFFF;int ... 阅读全文
浙公网安备 33010602011771号