01背包动态规划-java源码

原创 2016年05月31日 14:11:49

算法设计与分析中的01背包问题是学习动态规划的经典问题,这里是该算法的Java实现,(我就不讲算法了,适合了解算法但是编程不太熟练的童鞋看)话不多说,直接上代码吧!

<span style="font-size:24px;">package Algorithms;

public class Bag01 {

	public static void main(String[] args) {
		    int s;//获得的最大价值
		    int w[]={1,2,3,4,5,3,6,8,2,8,1,4,6,4,7};//物品的重量
		    int v[]={5,8,9,20,20,3,12,8,4,8,3,44,36,4,7};//物品的价值
		    int x[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//物品的选取状态 0/1
		    int n,i;
		    int C=50;//背包最大容量
		    n=15;//  物品数
		    s=KnapSack(n,w,v,x,C);
		    System.out.println("最大物品价值为:");
		    System.out.println(s);
		   
		    

	}
	static int V[][] = new int[100][100];   //前i个物品装入容量为j的背包中获得的最大价值
	public static int max(int a,int b)
	{
	   if(a>=b)
	       return a;
	   else return b;
	}

	public static int KnapSack(int n,int w[],int v[],int x[],int C)
	{
	    int i,j;
	    for(i=0;i<=n;i++)
	        V[i][0]=0;
	    for(j=0;j<=C;j++)
	        V[0][j]=0;
	    for(i=1;i<=n-1;i++)  //i=0
	        for(j=0;j<=C;j++)
	            if(j<w[i])
	                V[i][j]=V[i-1][j];
	            else
	                V[i][j]=max(V[i-1][j],V[i-1][j-w[i]]+v[i]);
	            j=C;
	            for(i=n-1;i>0;i--)  //i>=0
	            {
	                if(V[i][j]>V[i-1][j])
	                {
	                x[i]=1;
	                j=j-w[i];
	                }
	            else
	                x[i]=0;
	            }
	            System.out.print("选中的物品是:\n");
	            for(i=0;i<n;i++)
	                System.out.print(x[i]);
	            System.out.println();
	        return V[n-1][C];
	        
	}

}</span><span style="font-size:32px;">
</span>
代码不长,各变量的含义注释里也都有,如果你想看动态规划的结果记录矩阵的话,
for(int i=0;i<100;i++){
    for(int j=0;j<100;j++){
        System.out.print(V[i][j]);
}
System.out.println();
}
Y(^o^)Y好了,就这样吧。

PS:转载请注明出处,作者xingsha,谢谢合作!(~ ̄▽ ̄)~


版权声明:本文为博主原创文章,未经博主允许不得转载。

用动态规划解01背包(java版)

解题思路的大致步骤: 1、输入信息 2、初始化dp 3、在dp矩阵中计算最优值 4、利用最优值构造最优解 5、输出信息建议大家可以把下面的代码直接复制并粘贴到编译器就可以运行了。下面代码的测...

01背包问题优化与java代码的详解(动态规划)

由于算法讲解文字较多,直接摘图,撰写本文的目的在于写出我对代码的详细解读。如有错误,请大家指出。 注:前面问题描述以及算法分析摘取其他优秀网站,后面附有详细的代码讲解,以及图片讲解 ...

Java语言之动态规划实现01背包

自己写的,代码直接可用。

动态规划之背包问题01--java实现

背包问题具体例子:假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3。物品a1重量为3kg,价值为4;物品a2重量为4kg,价值为5;物品a3重量为5kg,价值为6。将哪些物品放入背包...

动态规划_01背包问题_Java实现

什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案。...

Java动态规划01背包问题

问题描述:给定 n种物品和一背包,物品i的重量是wi,其价值是pi,背包的容量是M,问如何选择装入背包中的物品总价值最大? 同样,我们可以构建一个二维数组max用来存储结果。max[i][j]表示背包...

蓝桥杯-01背包-动态规划-java

给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式   输入的第一行包含两个整数n, m,分别表示物品的个数和...

c c++ 01背包问题动态规划解决

  • 2013年11月05日 16:45
  • 28KB
  • 下载

动态规划01背包

  • 2015年03月29日 16:08
  • 643B
  • 下载

c++实现0-1背包问题完整源码续(动态规划+回溯法实现)

//回溯法是将解空间映射为一棵解空间数(二叉树),第i层的结点代表第i个待选结点,以i为根,往左延生就代表选择该结点,往右延生表示不选该结点//每个叶子结点有唯一一条路径代表一个解#include ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:01背包动态规划-java源码
举报原因:
原因补充:

(最多只允许输入30个字)