public class sf {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] weight = {3,5,2,6,4}; //物品重量
int[] val = {4,4,3,5,3}; //物品价值
int m = 12; //背包容量
int n = val.length; //物品个数
int[][] f = new int[n+1][m+1]; //f[i][j]表示前i个物品能装入容量为j的背包中的最大价值
int[][] path = new int[n+1][m+1];
//初始化第一列和第一行
for(int i=0;i<f.length;i++){
f[i][0] = 0;
}
for(int i=0;i<f[0].length;i++){
f[0][i] = 0;
}
//通过公式迭代计算
for(int i=1;i<f.length;i++){
for(int j=1;j<f[0].length;j++){
if(weight[i-1]>j)
f[i][j] = f[i-1][j];
else{
if(f[i-1][j]<f[i-1][j-weight[i-1]]+val[i-1]){
f[i][j] = f[i-1][j-weight[i-1]]+val[i-1];
path[i][j] = 1;
}else{
f[i][j] = f[i-1][j];
}
//f[i][j] = Math.max(f[i-1][j], f[i-1][j-weight[i-1]]+val[i-1]);
}
}
}
for(int i=0;i<f.length;i++){
for(int j=0;j<f[0].length;j++){
System.out.print(f[i][j]+" ");
}
System.out.println();
}
int i=f.length-1;
int j=f[0].length-1;
while(i>0&&j>0){
if(path[i][j] == 1){
System.out.print("第"+i+"个物品装入 ");
j -= weight[i-1];
}
i--;
}
}
}
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 0 0 0 4 4 4 4 4 8 8 8 8 8 0 0 3 4 4 7 7 7 8 8 11 11 11 0 0 3 4 4 7 7 7 8 9 11 12 12 0 0 3 4 4 7 7 7 8 10 11 12 12 第4个物品装入 第3个物品装入 第1个物品装入
for i=1..N
for v=V..0
f[v]=max{f[v],f[v-c[i]]+w[i]};
public class sf {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] weight = {3,5,2,6,4}; //物品重量
int[] val = {4,4,3,5,3}; //物品价值
int m = 12; //背包容量
int n = val.length; //物品个数
int[] f = new int[m+1];
for(int i=0;i<f.length;i++){ //不必装满则初始化为0
f[i] = 0;
}
for(int i=0;i<n;i++){
for(int j=f.length-1;j>=weight[i];j--){
f[j] = Math.max(f[j], f[j-weight[i]]+val[i]);
}
}
for(int i=0;i<f.length;i++){
System.out.print(f[i]+" ");
}
System.out.println();
System.out.println("最大价值为"+f[f.length-1]);
}
}
0 0 3 4 4 7 7 7 8 10 11 12 12 最大价值为12
public class sf {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] weight = {3,5,2,6,4}; //物品重量
int[] val = {4,4,3,5,3}; //物品价值
int m = 12; //背包容量
int n = val.length; //物品个数
int[] f = new int[m+1];
for(int i=1;i<f.length;i++){ //必装满则f[0]=0,f[1...m]都初始化为无穷小
f[i] = Integer.MIN_VALUE;
}
for(int i=0;i<n;i++){
for(int j=f.length-1;j>=weight[i];j--){
f[j] = Math.max(f[j], f[j-weight[i]]+val[i]);
}
}
for(int i=0;i<f.length;i++){
System.out.print(f[i]+" ");
}
System.out.println();
System.out.println("最大价值为"+f[f.length-1]);
}
}
0 -2147483648 3 4 3 7 6 7 8 10 11 12 11 最大价值为11
for i=1..N
for v=0..V
f[v]=max{f[v],f[v-cost]+weight}
public class test{
public static void main(String[] args){
int[] weight = {3,4,6,2,5};
int[] val = {6,8,7,5,9};
int maxw = 10;
int[] f = new int[maxw+1];
for(int i=0;i<f.length;i++){
f[i] = 0;
}
for(int i=0;i<val.length;i++){
for(int j=weight[i];j<f.length;j++){
f[j] = Math.max(f[j], f[j-weight[i]]+val[i]);
}
}
System.out.println(f[maxw]);
}
}
25
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有