package org.dynamic;
/**
* 动态规划解决-背包问题
* @author cjj_1
* @date 2020-09-04 15:48
*/
public class Knapsack {
public static void main(String[] args) {
int[] w={1,4,3};//重量坐标
float[] v ={1500,3000,2000};//价格坐标
float[][] form = new float[v.length+1][4+1];//构成一个价格与重量的二维数组
float max = getMaxKnapsackValue(v,w,form);
System.out.println(max);
}
/**
* 获取背包的最大价值
* @return
*/
public static Float getMaxKnapsackValue(float[] v,int[] w,float[][] form){
//置第一列为0
for (int i=0;i<form.length;i++){
form[i][0] = 0;
}
//置第一行为0
for (int j =0;j<form[0].length;j++){
form[0][j] =0;
}
/**
* 填表格,为每一个表格填写最大价格容量
*/
for(int i=1;i<form.length;i++){
for (int j=1;j<form[i].length;j++){
if(w[i-1]>j){
form[i][j] = form[i-1][j];
}else {
form[i][j] = Math.max(form[i-1][j],v[i-1]+form[i-1][j-w[i-1]]);
}
}
}
float max=0;
for (int i=1;i<v.length+1;i++){
System.out.println(i);
if(max<form[i][4]){
max = form[i][4];
}
}
return max;
}
}
动态规划算法
最新推荐文章于 2024-08-26 14:50:03 发布