我是动态规划新手,已经尝试了我的第一个DP问题。问题陈述是
给定一个尺寸为C的背包,以及n个尺寸为s[]且值为v[]的物品,最大化可放入背包的物品的容量。一个物品可以重复任意次数。(允许重复物品)。
虽然我能够建立递归关系并创建DP表,最终得到背包中可以放入的最大值,但我无法设计一种方法来检索必须选择哪些值才能得到所需的和。
以下是我的解决方案:
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int s[] = { 1, 3, 4, 5, 2, 7, 8 , 10};
int v[] = { 34, 45, 23, 78, 33, 5, 7 , 1};
int n = ( (sizeof(s)) / (sizeof(s[0])) );
vector<int> backtrack;
int C = 15;
int pos;
int m[20];
m[0] = 0;
int mx = 0;
for ( int j = 1; j <= C; j++) {
mx = 0;
m[j] = m[j-1];
pos = j-1;
for ( int i = 0; i < n; i++) {
mx = m[i-s[i]] + v[i];
if ( mx > m[i] ) {
m[i] = mx;
pos = i - s[j];
}
}
backtrack.push_back(pos);
}
cout << m[C] << endl<<endl;
for ( int i = 0; i < backtrack.size(); i++) {
cout << s[backtrack[i]] <<endl;
}
return 0;
}
在我的解决方案中,我尝试将选择的最大值项的位置存储在向量中,并最终打印它们。然而,这似乎并没有给我正确的解决方案。
运行该程序会产生:
79
2
3
0
5
2
7
8
10
34
45
23
78
33
5
7
从输出中可以明显看出,输出中的数字不能是所选项目的大小,因为输出中没有显示大小为0的项目。
我希望你能帮我找到逻辑或实现中的错误。谢谢
你在遵循贪婪的方法。这很聪明,但很有启发性。我不会给你正确的代码,因为这可能是一个家庭作业,但递归函数背包
如下所示:
knapsack(C): maximum profit achivable using a knapsack of Capacity C
knapsack(C) = max { knapsack(C-w[i]) + v[i] } for all w[i] <= C
knapsack(0) = 0
代码:
dp(0) = 0;
for i = 1 to C
dp(i) = -INF;
for k = i-1 downto 0
if w[k] < i then
dp(i) = max{dp(i-w[k]) + v[k], dp(i)};
print dp(Capacity);
动态规划 动态规划 Dynamic Programming,核心思想就是将大问题划分成小问题进行解决,从而一步一步的获得最优解的处理算法 动态规划跟分治算法思想类似,但动态规划算法会依赖到上一次计算的结果,每次求解是建立在上一次子阶段的结果基础之上进一步处理,而分治算法分解出来问题往往是独立的 动态规划一般可以通过填表的方式进行逐步推进得到最优解 0/1背包问题 01背包问题是经典的利用动态规划算
我很好奇是否有可能修改(或使用)无界背包问题的DP算法,以最小化背包中物品的总价值,同时使总重量至少有一些最小约束C。 UKP最大化版本的自下而上DP算法: 我们能做一个最小化的UKP吗?如果没有,有人能提供另一种解决方案或技术来解决这样的问题吗? 谢谢,丹
几天前,我在读关于分数背包问题的贪婪算法和动态规划的书,我发现这个问题可以用贪婪方法得到最优解。谁能给出一个例子或解决方案来解决这个问题的动态规划方法? 我知道贪婪方法是解决这个问题的最好方法,但我想知道动态规划是如何解决这个问题的。
计算机科学中的许多程序是为了优化一些值而编写的; 例如,找到两个点之间的最短路径,找到最适合一组点的线,或找到满足某些标准的最小对象集。计算机科学家使用许多策略来解决这些问题。本书的目标之一是向你展示几种不同的解决问题的策略。动态规划 是这些类型的优化问题的一个策略。 优化问题的典型例子包括使用最少的硬币找零。假设你是一个自动售货机制造商的程序员。你的公司希望通过给每个交易最少硬币来简化工作。假设
*正则匹配问题[H] 三角形问题[M] 计算二进制数中1的个数[M] *括号匹配问题[M] 最短路径和[M]
本文向大家介绍PHP动态规划解决0-1背包问题实例分析,包括了PHP动态规划解决0-1背包问题实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了PHP动态规划解决0-1背包问题。分享给大家供大家参考。具体分析如下: 背包问题描述:一个承受最大重量为W的背包,现在有n个物品,每个物品重量为t, 每个物品的价值为v。 要使得这个背包重量最大(但不能超过W),同时又需要背包的价值最大。 思