package zju;
public class PackageTest {
/*
* 题目:给定n个物体,其中第i个物体重量wi,价值vi ,另有一个最大载重m的背包,往里面塞东西使得总价值尽可能大
* 令f(i,j)表示用前i个物体装出重量为j的组合时的最大价值
* f(i,j)=max{f(i-1,j), f(i-1, j-w[i])+v[i] } ,i>0, j>=w[i];
* f(i,j) = f(i-1,j) , i>0, j<w[i];
* f(0,j) = v[0] , i=0, j>=w[0];
* f(0,j) = 0, i=0, j<w[0];
*/
public int countValues(int m,int w[],int v[]){
int[][] c=new int[w.length][m+1];
//初始化数组c前一排
for(int k=0;k<=m;k++){
if(k>=w[0]){
c[0][k]=v[0];
}else{
c[0][k]=0;
}
}
//计算总价值
for(int i=1;i<w.length;i++){
for(int j=0;j<=m;j++){
if(j<w[i]){
c[i][j]=c[i-1][j];
}else if(c[i-1][j]>=c[i-1][j-w[i]]+v[i]){
c[i][j]=c[i-1][j];
}else{
c[i][j]=c[i-1][j-w[i]]+v[i];
}
}
}
//打印数组c,可省略
for(int i=0;i<w.length;i++ ){
for(int j=0;j<=m;j++){
System.out.print(c[i][j]+" ");
}
System.out.println();
}
return c[w.length-1][m];
}
public static void main(String[] args) {
int w[] = {2,2,6,5,4};
int v[] = {6,3,7,4,6};
int m=10;
PackageTest p=new PackageTest();
System.out.println("The most value is:"+p.countValues(m, w, v));
}
}
分享到:
相关推荐
算法设计,01背包问题,动态规划算法,python实现。 动态规划算法是解决01背包问题的一种有效方法。 1. 基本概述 - 定义:01背包问题是一类组合优化的NP完全问题,其核心在于如何在不超过背包容量的前提下,选择...
01背包问题是一种经典的计算机算法问题,主要应用于资源分配、任务调度等领域,它与动态规划密切相关。动态规划是一种解决问题的方法,通常用于优化具有重叠子问题和最优子结构的复杂问题,通过存储和复用子问题的解...
01背包问题是一种经典的计算机科学中的动态规划问题,主要出现在算法设计和优化的领域,尤其在求解资源分配和组合优化问题时非常常见。在这个问题中,我们有一个背包,其容量有限,同时有一系列物品,每种物品都有...
利用动态规划解决01背包问题 动态规划是一种非常重要的算法方法,它可以用来解决许多复杂的问题,例如经济管理、生产调度、工程技术和最优控制等方面的问题。01背包问题是动态规划的经典模型之一,它可以用于解决...
01背包问题是一种经典的动态规划问题,主要应用于优化资源分配以获取最大效益。在这个问题中,我们有N种物品,每种物品有一个固定的体积wi和对应的价值ci,还有一个总容量为V的背包。目标是在不超过背包容量的情况下...
动态规划求解0-1背包问题的改进算法完整解释 在计算机算法设计与分析中,动态规划法是解决背包问题的常用方法之一。所谓背包问题,是指在有限的背包容量下,如何选择物品来达到最大价值的问题。在本文中,我们将对...
本文将深入探讨01背包问题的四种解决方法:动态规划、贪心、回溯和分支限界。 **动态规划方法** 动态规划是解决01背包问题最常用且效率最高的方法。其核心思想是构建一个二维数组dp,其中dp[i][j]表示在前i个物品...
动态规划解决01背包问题 动态规划是解决01背包问题的有效方法,该方法的核心是填表,通过填表来找到问题的最优解。下面对动态规划解决01背包问题的知识点进行详细的解释。 一、问题描述 01背包问题是指有n个物品...
在提供的压缩包文件"Knapsack"中,可能包含了用某种编程语言实现的回溯法或动态规划法解01背包问题的源代码。由于代码未编译完成,你需要自行完成编译和运行,以验证和理解算法的具体实现。在调试和运行代码时,注意...
对于0-1背包问题,动态规划的解决方案通常包括以下步骤: 1. 初始化:创建一个二维数组`dp`,其中`dp[i][j]`表示在前`i`件物品中选择总重量不超过`j`的物品所能得到的最大价值。初始化时,`dp[0][j] = 0`,因为没有...
01背包问题动态规划
本篇文章将深入探讨C#语言实现动态规划解决01背包问题的详细过程。 01背包问题是一个经典的组合优化问题,常见于计算机科学和运筹学。问题设定如下:假设我们有一组物品,每个物品都有一个重量和一个价值,我们需要...
总结,这个压缩包包含了解决01背包问题的两种语言实现——Swift和Java,都采用了动态规划方法。动态规划是一种有效的算法策略,适用于解决背包问题这类优化问题。在实际应用中,掌握这种算法可以帮助我们设计出更...
在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W·2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。 注意:在本题中,所有的体积值均为整数。
利用动态规划方法求解经典0-1背包问题,仅供参考,欢迎指正
标题中的"动态规划_01背包_01背包_C++_算法_背包_动态规划_"揭示了我们讨论的主题是使用C++编程语言实现的01背包问题的动态规划算法。01背包问题指的是每个物品只能被选择或不被选择(即0或1),不能被分割,目标是...
### 01背包问题(动态规划法) #### 一、问题描述 01背包问题是一种经典的组合优化问题,在计算机科学领域具有重要的应用价值,尤其是在算法竞赛中极为常见。假设我们有一个背包,其最大载重量为 \( m \),同时有一...
### 01背包问题动态规划详解及其学习意义 #### 一、01背包问题概述 01背包问题作为计算机科学领域中的一个经典问题,属于组合优化问题的一种。该问题的基本形式如下:假设我们有一个背包,这个背包的最大承重为W...
提供0-1背包问题c++代码,实现功能如下: /**输入参数: * @param m 表示背包的最大容量 * @param n 表示商品个数 * @param a[] 每个商品的容量 * @param p[] 每个商品的价值 */ /**输出: 求最大商品value*/
动态规划是解决01背包问题的关键方法。动态规划是一种将复杂问题分解为更小的子问题,通过构建一个表格来存储子问题的解,避免重复计算,从而达到优化计算效率的目的。在01背包问题中,我们可以创建一个二维数组dp,...