import java.util.Formatter;
public class KnapSack {
static int[] weights = { 2, 2, 6, 5, 4 };
static int[] values = { 6, 3, 5, 4, 6 };
final static int C = 10;
static int[] packages = new int[weights.length];
// 根据动态规划函数,用一个(n + 1) * (C + 1) 的
// 二维表V, V[i][j]表示把前i个物品装入容量为j的背包中获得的最大价值
// 根据表达式把表的第0行和第0列初始化为0,然后一行一行的计算V[i][j]
// V(i,j) = V(i - 1, j) j < wi
// 或者 max{V(i-1,j), V(i-1,j-wi) + Vi}
static int knapSack(int n, int[] w, int[] v) {
int[][] Valus = new int[n + 1][C + 1];
// 初始化 第0列即 重量为0时
for (int i = 0; i <= n; i++) {
Valus[i][0] = 0;
}
// 初始化第0行 即为0个物品
for (int j = 0; j <= C; j++) {
Valus[0][j] = 0;
}
// 计算第i行,进行第i次迭代。
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= C; j++) {
if (j < w[i - 1]) {
Valus[i][j] = Valus[i - 1][j];
} else {
Valus[i][j] = Math.max(Valus[i - 1][j], Valus[i - 1][j - w[i - 1]] + v[i - 1]);
}
}
}
// 求装入背包的物品
int weight = C;
for (int i = n; i > 0; i--) {
if (Valus[i][weight] > Valus[i - 1][weight]) {
packages[i - 1] = 1;
weight = weight - w[i - 1];
} else {
packages[i - 1] = 0;
}
}
Formatter formatter = new Formatter(System.out);
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= C; j++) {
formatter.format("%-9s", Valus[i][j]);
}
System.out.println();
}
return Valus[n][C];
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
knapSack(5, weights, values);
for (int i : packages) {
System.out.print(i);
}
}
}
分享到:
相关推荐
背包问题是一个经典的动态规划模型。它既简单形象容易理解,又在某种程度上能够揭示动态规划的本质,不少教材都把它作为动态规划部分的第一道例题。
计算机算法设计与分析动态规划法求解0-1背包问题的改进算法完整解释
如题,动态规划法求解0-1背包问题实验报告 大二算法作业 使用java语言实现 内容框架:问题描述 思路分析 实例分析 实验原码及运行结果 实验心得
算法实验中用动态规划法解0-1背包问题,这里提供了源代码,仅供参考
0-1背包问题 动态规划源码0-1背包问题 动态规划源码0-1背包问题 动态规划源码0-1背包问题 动态规划源码0-1背包问题 动态规划源码0-1背包问题 动态规划源码0-1背包问题 动态规划源码
利用动态规划方法求解经典0-1背包问题,仅供参考,欢迎指正
提供0-1背包问题c++代码,实现功能如下: /**输入参数: * @param m 表示背包的最大容量 * @param n 表示商品个数 * @param a[] 每个商品的容量 * @param p[] 每个商品的价值 */ /**输出: 求最大商品value*/
基于MATLAB平台,用动态规划法解决0-1背包问题,较为简单。参数分别为[物品重量,物品价值,背包容量,背包价值]
这个是动态规划之跳跃点0-1背包问题,如果只是想要动态规划0-1背包问题求解代码,请到主页查看。18级学姐自主完成的算法作业,呕心沥血,基于四舍五入等于0基础的python实现,如果在语言规范上存在不足,那就。就憋...
背包的重量有限,每次只可取一种商品。利用动态规划实现所选商品总价值的最大值。
C++ 动态规划算法实现0-1背包问题 包含了代码、算法分析、测试文件和结果,非常详尽,值得拥有!
0-1背包问题 动态规划 分支限界 回溯 贪心四种方法
北京工业大学--算法作业2--动态规划算法实现0-1背包问题---Java代码 利用动态规划算法实现0-1背包问题或装配线调度问题。(二选一) 要求测试数据以文本文件的形式存储, 即所有的数据由文本文件读入。 利用动态...
本资源包含了0-1背包问题的最佳所有解法,其中包括动态规划算法,回溯法算法,分支限界算法和贪心算法。包含源代码。
0-1背包问题的完整c++源码 很不错的,有注释,很详细的
动态规划法解决0-1背包问题,非常实用,课程实验经常用到
c++实现的0-1背包问题 算法设计的动态规划问题
用回溯法写的0-1背包问题的解决方案,可以输入数据
0-1背包问题-算法简洁易懂