`
befairy
  • 浏览: 37418 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

01背包问题----动态规划

阅读更多
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背包问题,动态规划算法,python实现。 动态规划算法是解决01背包问题的一种有效方法。 1. 基本概述 - 定义:01背包问题是一类组合优化的NP完全问题,其核心在于如何在不超过背包容量的前提下,选择...

    01背包-动态规划-c语言

    01背包问题是一种经典的计算机算法问题,主要应用于资源分配、任务调度等领域,它与动态规划密切相关。动态规划是一种解决问题的方法,通常用于优化具有重叠子问题和最优子结构的复杂问题,通过存储和复用子问题的解...

    源代码_背包问题--01背包_

    01背包问题是一种经典的计算机科学中的动态规划问题,主要出现在算法设计和优化的领域,尤其在求解资源分配和组合优化问题时非常常见。在这个问题中,我们有一个背包,其容量有限,同时有一系列物品,每种物品都有...

    利用动态规划解决01背包问题

    利用动态规划解决01背包问题 动态规划是一种非常重要的算法方法,它可以用来解决许多复杂的问题,例如经济管理、生产调度、工程技术和最优控制等方面的问题。01背包问题是动态规划的经典模型之一,它可以用于解决...

    python动态规划背包问题算法-01背包问题(动态规划算法).pdf

    01背包问题是一种经典的动态规划问题,主要应用于优化资源分配以获取最大效益。在这个问题中,我们有N种物品,每种物品有一个固定的体积wi和对应的价值ci,还有一个总容量为V的背包。目标是在不超过背包容量的情况下...

    动态规划求解0-1背包问题的改进算法完整解释

    动态规划求解0-1背包问题的改进算法完整解释 在计算机算法设计与分析中,动态规划法是解决背包问题的常用方法之一。所谓背包问题,是指在有限的背包容量下,如何选择物品来达到最大价值的问题。在本文中,我们将对...

    01背包问题-四种方法

    本文将深入探讨01背包问题的四种解决方法:动态规划、贪心、回溯和分支限界。 **动态规划方法** 动态规划是解决01背包问题最常用且效率最高的方法。其核心思想是构建一个二维数组dp,其中dp[i][j]表示在前i个物品...

    动态规划解决01背包问题

    动态规划解决01背包问题 动态规划是解决01背包问题的有效方法,该方法的核心是填表,通过填表来找到问题的最优解。下面对动态规划解决01背包问题的知识点进行详细的解释。 一、问题描述 01背包问题是指有n个物品...

    回溯法和动态规划法解01背包问题

    在提供的压缩包文件"Knapsack"中,可能包含了用某种编程语言实现的回溯法或动态规划法解01背包问题的源代码。由于代码未编译完成,你需要自行完成编译和运行,以验证和理解算法的具体实现。在调试和运行代码时,注意...

    0-1背包问题 动态规划法——C语言代码

    对于0-1背包问题,动态规划的解决方案通常包括以下步骤: 1. 初始化:创建一个二维数组`dp`,其中`dp[i][j]`表示在前`i`件物品中选择总重量不超过`j`的物品所能得到的最大价值。初始化时,`dp[0][j] = 0`,因为没有...

    01背包问题动态规划 - 背包问题

    01背包问题动态规划

    C#实现-动态规划-01背包问题(Knapsack)

    本篇文章将深入探讨C#语言实现动态规划解决01背包问题的详细过程。 01背包问题是一个经典的组合优化问题,常见于计算机科学和运筹学。问题设定如下:假设我们有一组物品,每个物品都有一个重量和一个价值,我们需要...

    01背包问题--分别用swift和java求解

    总结,这个压缩包包含了解决01背包问题的两种语言实现——Swift和Java,都采用了动态规划方法。动态规划是一种有效的算法策略,适用于解决背包问题这类优化问题。在实际应用中,掌握这种算法可以帮助我们设计出更...

    01背包问题-动态规划算法

    在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W·2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。  注意:在本题中,所有的体积值均为整数。

    0-1背包问题(动态规划)

    利用动态规划方法求解经典0-1背包问题,仅供参考,欢迎指正

    动态规划_01背包_01背包_C++_算法_背包_动态规划_

    标题中的"动态规划_01背包_01背包_C++_算法_背包_动态规划_"揭示了我们讨论的主题是使用C++编程语言实现的01背包问题的动态规划算法。01背包问题指的是每个物品只能被选择或不被选择(即0或1),不能被分割,目标是...

    01背包问题(动态规划法)

    ### 01背包问题(动态规划法) #### 一、问题描述 01背包问题是一种经典的组合优化问题,在计算机科学领域具有重要的应用价值,尤其是在算法竞赛中极为常见。假设我们有一个背包,其最大载重量为 \( m \),同时有一...

    什么是01背包问题动态规划以及学习01背包问题动态规划的意义

    ### 01背包问题动态规划详解及其学习意义 #### 一、01背包问题概述 01背包问题作为计算机科学领域中的一个经典问题,属于组合优化问题的一种。该问题的基本形式如下:假设我们有一个背包,这个背包的最大承重为W...

    动态规划求0-1背包问题c++代码

    提供0-1背包问题c++代码,实现功能如下: /**输入参数: * @param m 表示背包的最大容量 * @param n 表示商品个数 * @param a[] 每个商品的容量 * @param p[] 每个商品的价值 */ /**输出: 求最大商品value*/

    动态规划解01背包问题

    动态规划是解决01背包问题的关键方法。动态规划是一种将复杂问题分解为更小的子问题,通过构建一个表格来存储子问题的解,避免重复计算,从而达到优化计算效率的目的。在01背包问题中,我们可以创建一个二维数组dp,...

Global site tag (gtag.js) - Google Analytics