算法-01背包1
来源:互联网 发布:三国志9最新优化伴侣 编辑:程序博客网 时间:2024/06/05 04:49
public class Package0_1 { private int c; //背包总容量 private int n; //背包中物品数目 private int []v; //背包中每个物品的价值,一定是一一对应的 private int []w; //背包中每个物品的重量,一定是一一对应的 private int [][]m; //动态规划求解时候所使用的空间 public Package0_1(){// c=20;n=6;// v=new int[]{12,45,23,14,5,27};// w=new int[]{2,9,8,3,7,6};// m=new int[n][c];// c=20;n=6; c=17;n=5; v=new int[]{4,5,10,11,13}; w=new int[]{3,4,7,8,9}; m=new int[n][c]; } public Package0_1(int c,int n,int []v,int []w,int [][]m){ this.c=c;this.n=n; this.v=v;this.w=w; this.m=m; } //自底向上求解子问题 public void knapsack(){ for(int i=0;i<n;i++) m[i][0]=0; for(int s=1;s<=n;s++){ for(int i=n-s;i>=0;i--){ for(int j=1;j<c;j++){ if(i==n-1){ if(j<w[i]) m[i][j]=0; else if(j>=w[i]) m[i][j]=v[i]; } else{ if(j<w[i]) m[i][j]=m[i+1][j]; else if(j>=w[i]) m[i][j]=m[i+1][j]>(m[i][j-w[i]]+v[i])?m[i+1][j]:(m[i][j-w[i]]+v[i]); } } } } } //循环求解0,1向量组,0代表相应位置不装入背包,1代表装入背包 public void traceBack(){ for(int k=1;k<=n;k++) System.out.print(k+" "); System.out.println(); int j=c-1; for(int i=0;i<n-1;i++){ if(m[i][j]==m[i+1][j]) System.out.print(0+" "); else{ System.out.print(1+" "); j-=w[i]; } } if(j>=w[n-1]) System.out.print(1); else System.out.print(0); } public static void main(String[] args) { Package0_1 package0_1=new Package0_1(); package0_1.knapsack(); package0_1.traceBack(); }}
阅读全文
0 0
- 算法-01背包1
- 算法杂谈--01背包
- [算法]01背包问题
- 01背包-近似算法
- 01背包算法
- 算法提高 01背包
- 算法提高 01背包
- 算法提高 01背包
- 算法提高 01背包
- 算法提高 01背包
- 算法提高 01背包
- 【算法】01背包问题
- 算法-01背包2
- 01背包-回溯算法
- 0-1背包算法
- 0-1背包算法
- [面试算法] 01背包 && 完全背包
- 动态规划背包算法(01背包和完全背包)
- 特征分解、奇异值分解几何意义
- 广西 2017 邀请赛 Duizi and Shunzi
- Add One Row to Tree
- 算法-二叉树遍历(递归和非递归)
- 数据结构排序
- 算法-01背包1
- 算法-01背包2
- 快速排序之分割数组
- ros_comm
- 算法学习-Bucket排序
- SQLServer--存储过程的分类
- 算法-求Factorial数列
- Palindromic Substrings
- 设计一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作