算法java实现--动态规划--0-1背包问题
来源:互联网 发布:浙江水利工程造价软件 编辑:程序博客网 时间:2024/05/20 17:38
0-1背包问题算法的java实现(动态规划法)
具体问题描述以及C/C++实现参见网址
http://blog.csdn.net/liufeng_king/article/details/8683136
/** * 01 背包问题(动态规划) * @author Lican * */public class Pack01 {public int[] v;//价值数组public int[] w;//重量数组public int c;//背包容量public int[][] m;//m(i,j)是背包容量为j,可选物品为,i,i+1,i+2,i+3,...,n 时0-1背包问题的最优值public int[] x;//保存第i个物品是否放入背包,1:放入;0:未放入public Pack01(int[] vv,int[] ww,int cc){this.v=vv;this.w=ww;this.c=cc;this.x=new int[vv.length];int max = maxM(w,c);//获取j的最大值,从而通过new关键字创建m数组,在内存中维数组分配相应的存储空间m = new int[v.length][max+1];}/** * 获取重量和背包容量的最大值,从而为m创建相应的存储空间 * @param w * @param c * @return */public int maxM(int[] w,int c){int max = c;for(int i=1;i<w.length;i++){if(w[i]>c)max=w[i];}return max;}public void knapsack(int[] v,int[] w,int c,int[][] m){int n =v.length-1;int jMax = Math.min(w[n]-1, c);for(int j = 0;j <= jMax;j++)m[n][j]=0;for(int j=w[n];j<=c;j++)m[n][j]=v[n];for(int i=n-1;i>1;i--){jMax=Math.min(w[i]-1,c);for(int j=0;j<=jMax;j++)m[i][j]=m[i+1][j];for(int j=w[i];j<=c;j++)m[i][j]=Math.max(m[i+1][j], m[i+1][j-w[i]]+v[i]);}//m[1][c]=m[2][c];if(c>=w[1])//对于i=1时的两种情况m[1][c]=Math.max(m[2][c], m[2][c-w[1]]+v[1]);elsem[1][c]=m[2][c];}public void traceback(int[][] m,int[] w,int c,int[] x){int n=w.length-1;for(int i=1;i<n;i++){if(m[i][c]==m[i+1][c])//第i个包未放入x[i]=0;else{x[i]=1;c-=w[i];//c是全局变量}}x[n]=(m[n][c]>0)?1:0;}public static void main(String[] args) {int v[]={0,2,1,4,3};int w[]={0,1,4,2,3};int c=8;Pack01 pa = new Pack01(v,w,c);pa.knapsack(pa.v, pa.w, pa.c, pa.m);System.out.println("装入背包中物品总价值最大为:");System.out.println(pa.m[1][c]);pa.traceback(pa.m, pa.w, pa.c, pa.x);System.out.println("装入的物品的序号为:");for(int i=0;i<=v.length-1;i++){if(pa.x[i]==1)System.out.print(i+" ");}}}
运行结果:
0 0
- 动态规划算法0-1背包问题java实现
- 算法java实现--动态规划--0-1背包问题
- 0-1背包问题动态规划算法
- 动态规划之0/1背包问题-java实现
- 背包问题动态规划算法java实现及分析
- 0/1背包问题----动态规划实现
- 算法/动态规划/knapsack0-1背包问题
- C++实现动态规划算法之解决0-1背包问题
- 【算法数据结构Java实现】Java实现动态规划(背包问题)
- 0/1背包问题的动态规划算法
- 简单0-1背包问题(算法类别:动态规划)
- 算法:动态规划解 0-1 背包问题
- 计算机算法--动态规划0-1背包问题
- 0-1背包问题 动态规划 算法入门经典
- 动态规划算法求解0,1背包问题
- 算法导论--动态规划(0-1背包问题)
- 动态规划算法解决0-1背包问题
- 算法 -- 0-1背包问题之动态规划
- 【Cocos2d-X开发学习笔记】第10期:渲染框架之几何图形的绘制DrawPrimitives
- cocos2d-x3.0 windows 环境配置
- 关于TCP的一些知识
- Android开发,eclipse DDMS浏览不了/data文件夹,解决方案
- libgdx actions 和Interpolation分析
- 算法java实现--动态规划--0-1背包问题
- 阿里巴巴 六脉神剑
- 独处也是一种很重要的能力
- LeetCode Word Break II
- 2014-4-27 心情
- Dedecms去掉所有版权
- Hibernate存取图片
- 寻找高手交流编程技术
- foj 2171