背包问题
文章平均质量分 78
相思作坊半世离殇
多刷题。
展开
-
01背包问题
背包问题是动态规划中的经典问题,而01背包问题又是背包问题的著名问题,总之初学动态规划,这个必须要熟练掌握。 01背包问题的大致意思:有n个重量、价值分别为w[i]、v[i]的物品,从这些物品中挑选出总质量不超过W的物品,求所有挑选方案中价值总和的最大值。 1.最朴素的办法,针对每个物品是否放入背包进行搜索试试看,代码如下: int n; int w[105]; int v[105]; //原创 2016-07-18 19:33:45 · 438 阅读 · 0 评论 -
完全背包问题
这个经典问题的大致意思是: 有n种物品重量和价值分别为w[i]、v[i]的物品,从这些物品中挑选出总重量不超过W的物品,求出挑选物品价值总和的最大值。每种物品可以挑选任意多件。 利用二维数组dp,其中dp[i+1][j]表示从前i种物品中挑选出总重量不超过j的物品的价值总和的最大值。显然有 dp[0][j]=0; dp[i+1][j]=max(dp[i][j-k*w[i]]+k*v[i])原创 2016-07-18 21:49:10 · 254 阅读 · 0 评论 -
多重部分和问题
有n种不同大小的数字a[i],每种各m[i]个。判断是否可以从这些数字中选出若干使它们的和恰好为K。 限制条件:1 这个问题可以用DP求解,如何定义递推式影响最后的时间复杂度。 定义dp[i+1][j]:用前i+1种数字(数字的编号是从0到i)是否能加成j 为了用前i+1种数字加成j,就需要能前i种数字加成j,j-a[i],……,j-m[i]*a[i]的一种。 因此有以下递推式:dp[i原创 2016-07-19 00:09:00 · 507 阅读 · 0 评论 -
多重背包问题
来自《挑战程序设计竞赛》 1.题目原文 有n中物品,它们的重量和价值分别是w[i]和v[i]。现在要从中选出一些物品使得总重量不超过W,并且价值的总和最大。不过要求第i中物品最多可以选m[i]个。 数据范围 1 2.解题思路1 这是一个有个数限制的问题,对于每个物品至多选一个或者可以选任意个的问题我们已经在O(nW)时间内求解。如果使用同样的方法解答本题,则状态转移方程为: dp[i原创 2016-10-07 00:55:40 · 288 阅读 · 0 评论 -
Coins(poj1742)动态规划+挑战多重部分和问题
Language: Default Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 34343 Accepted: 11661 Description People in Silverland use coins.They have coin原创 2016-07-19 10:26:13 · 805 阅读 · 0 评论