我很好奇是否有可能修改(或使用)无界背包问题的DP算法,以最小化背包中物品的总价值,同时使总重量至少有一些最小约束C。
UKP最大化版本的自下而上DP算法:
let w = set of weights (0-indexed)
and v = set of values (0-indexed)
DP[i][j] = max{ DP[i-1][j], DP[i][j - w[i-1]] + v[i-1] }
for i = 0,...,N and j = 0,...,C
given DP[0][j] = 0 and DP[i][0] = 0
where N = amount of items
and C = maximum weight
DP[N][C] = the maximum value of items for a knapsack capacity of C
我们能做一个最小化的UKP吗?如果没有,有人能提供另一种解决方案或技术来解决这样的问题吗?
谢谢,丹
你会有新的复发
DP[i][j] ( j <= 0) = 0
DP[i][j] (i = 0, j > 0) = infinity
DP[i][j] (i > 0, j > 0) = min{ DP[i-1][j], DP[i-1][j - w[i-1]] + v[i-1] },
对于每个i
和j
,它给出了0.项的最小值。。i-1
以使重量至少达到j
infinity
应该是一个足够大的值,以便任何合法值都小于infinity
。
请注意,对于所有j,DP[i][j]=0
此外,根据
DP[i][j]
的定义,人们可能期望DP[i][0]
的非零值,因为j=0
对应于0的最小权重,但DP[i][0]=0
对于所有i
是DP算法所必需的。
动态规划 动态规划 Dynamic Programming,核心思想就是将大问题划分成小问题进行解决,从而一步一步的获得最优解的处理算法 动态规划跟分治算法思想类似,但动态规划算法会依赖到上一次计算的结果,每次求解是建立在上一次子阶段的结果基础之上进一步处理,而分治算法分解出来问题往往是独立的 动态规划一般可以通过填表的方式进行逐步推进得到最优解 0/1背包问题 01背包问题是经典的利用动态规划算
我是动态规划新手,已经尝试了我的第一个DP问题。问题陈述是 给定一个尺寸为C的背包,以及n个尺寸为s[]且值为v[]的物品,最大化可放入背包的物品的容量。一个物品可以重复任意次数。(允许重复物品)。 虽然我能够建立递归关系并创建DP表,最终得到背包中可以放入的最大值,但我无法设计一种方法来检索必须选择哪些值才能得到所需的和。 以下是我的解决方案: 在我的解决方案中,我尝试将选择的最大值项的位置存储
几天前,我在读关于分数背包问题的贪婪算法和动态规划的书,我发现这个问题可以用贪婪方法得到最优解。谁能给出一个例子或解决方案来解决这个问题的动态规划方法? 我知道贪婪方法是解决这个问题的最好方法,但我想知道动态规划是如何解决这个问题的。
计算机科学中的许多程序是为了优化一些值而编写的; 例如,找到两个点之间的最短路径,找到最适合一组点的线,或找到满足某些标准的最小对象集。计算机科学家使用许多策略来解决这些问题。本书的目标之一是向你展示几种不同的解决问题的策略。动态规划 是这些类型的优化问题的一个策略。 优化问题的典型例子包括使用最少的硬币找零。假设你是一个自动售货机制造商的程序员。你的公司希望通过给每个交易最少硬币来简化工作。假设
*正则匹配问题[H] 三角形问题[M] 计算二进制数中1的个数[M] *括号匹配问题[M] 最短路径和[M]
问题-你会得到不同面额的硬币和总金额。写一个函数来计算你需要的最少数量的硬币来组成这个数量。那里有无限的硬币供应。 我的方法——我遵循了自上而下的方法,但是使用map stl进行记忆,我得到了TLE。请帮助找出误差和估计时间复杂度。 这是我的密码-