动态规划
- 动态规划
- 背包问题
public class Demo{
public static void main(String[] args){
// 物品重量
int[] w = {1,4,3};
// 物品价格
int[] val = {1500,3000,2000};
// 背包容量
int m = 4;
// 物品个数
int n = val.lenght;
// 创建二维数组
int[][] v = new int[n+1][m+1];
// 记录放入商品详情
int[][] path = new int[n+1][m+1];
// 初始化第一行第一列,默认本来就为0
for(int i=0;i<v.length;i++){
// 第一列设置0
v[i][0] = 0;
}
for(int i=0;i<v[0].lenght;i++){
// 第一行设置0
v[0][i] = 0;
}
// 动态规划
for(int i=1;i<v.lenght;i++){
for(int j=1;j<v[0].lenght;j++){
// 公式
if(w[i-1]>j){
v[j][j] = v[i-1][j];
}else{
// v[i][j] = Math.max(v[i-1][j],val[i-1]+v[i-1][j-w[i-1]]);
if(v[i-1][j]<val[i-1]+v[i-1][j-w[i-1]]){
v[i][j] = val[i-1]+v[i-1][j-w[i-1]];
path[i][j] = 1;
}else{
v[i][j] = v[i-1][j];
}
}
}
}
// 商品放入
int i = path.length-1;
int j = path[0].length-1;
while(i>0 && j > 0){// 倒叙遍历
if(path[i][j]==1){
System.ou.println("第"+i+"个商品被放入");
j -= w[i-1];
}
i--;
}
}
}