01背包问题--Java
2017-04-07 21:03
78 查看
关于01背包,网上很少用Java完成,大多是用c/c++,这让学习Java的非常难受,比如我,今天终于把01背包搞清楚了,趁热打铁,为此写下此博。。。。
例如:一个背包可以装重量为10的物品,现在有重量分别为2、3 、4 、5、8、9的物品,其价值分别为3、4、5、8、10.问这样才能使背包的到最大价值?
首先送上公式:
B[k][c]=Math.max(value1,value2);当第k个物品的重量大于当前所剩重量时:B[k-1][c],当小于时分两种情况:选择不装入k,那么value1=B[k-1][c],装入k: value2=B[k-1][c-w[k]+v[k](w[k]为第k个的重量,v[k]为第k个的价值).
送上一个背包模拟网站http://www.karaffeltut.com/NEWKaraffeltutCom/Knapsack/knapsack.html
Java:
import java.util.Scanner;
public class 我的背包 {
static int N=6,W=11;
static int [][]B=new int
[W];
public static void cap(int w[],int V[]){
for(int k=1;k<N;k++){
for(int c=1;c<W;c++){
if(w[k]>c){//不能装入
B[k][c]=B[k-1][c];
}else {
int value1=B[k-1][c-w[k]]+V[k];//选择装入
int value2=B[k-1][c];//选择不装
B[k][c]=Math.max(value1, value2);看装与不装那个的价值大
}
}
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int w[]=new int
;
int v[]=new int[W];
w[0]=0;
v[0]=0;
for(int i=1;i<N;i++){
w[i]=in.nextInt();
v[i]=in.nextInt();
}
cap(w,v);
System.out.println(B[5][10]);
}
}
例如:一个背包可以装重量为10的物品,现在有重量分别为2、3 、4 、5、8、9的物品,其价值分别为3、4、5、8、10.问这样才能使背包的到最大价值?
首先送上公式:
B[k][c]=Math.max(value1,value2);当第k个物品的重量大于当前所剩重量时:B[k-1][c],当小于时分两种情况:选择不装入k,那么value1=B[k-1][c],装入k: value2=B[k-1][c-w[k]+v[k](w[k]为第k个的重量,v[k]为第k个的价值).
送上一个背包模拟网站http://www.karaffeltut.com/NEWKaraffeltutCom/Knapsack/knapsack.html
Java:
import java.util.Scanner;
public class 我的背包 {
static int N=6,W=11;
static int [][]B=new int
[W];
public static void cap(int w[],int V[]){
for(int k=1;k<N;k++){
for(int c=1;c<W;c++){
if(w[k]>c){//不能装入
B[k][c]=B[k-1][c];
}else {
int value1=B[k-1][c-w[k]]+V[k];//选择装入
int value2=B[k-1][c];//选择不装
B[k][c]=Math.max(value1, value2);看装与不装那个的价值大
}
}
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int w[]=new int
;
int v[]=new int[W];
w[0]=0;
v[0]=0;
for(int i=1;i<N;i++){
w[i]=in.nextInt();
v[i]=in.nextInt();
}
cap(w,v);
System.out.println(B[5][10]);
}
}
相关文章推荐
- 01背包问题的java界面实现
- 【算法】01背包问题的Java实现
- 动态规划解决01背包问题(java实现)
- java实现01背包问题
- 01背包问题(java实现)
- 01背包问题(Java实现)
- Java 01背包问题
- 基于遗传算法求解01背包问题(JAVA)
- 贪心算法_01背包问题_Java实现
- 01背包问题(回溯法实现,java)
- 杭电oj(Java版)—— 2602 Bone Collector—— 01背包问题
- 每天一道算法题(四) (动态规划算法)01背包问题Java实现
- 01背包问题_回溯法_java实现
- 遗传算法解01背包问题(Java)
- Java-01背包问题-动态规划-递归和非递归实现
- 学习解01背包问题的记录(Java描述)
- 01背包问题-java
- 回溯算法_01背包问题_Java实现
- Java语言描述:回溯法之01背包问题(最易理解的回溯法讲解)
- 01背包问题的java界面实现