0/1 背包问题 动态规划
有为N件物品,它们的重量w分别是w1,w2,…,wn,它们的价值v分别是v1,v2,…,vn,每件物品数量有且仅有一个,现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?
链接:https://www.nowcoder.com/questionTerminal/7e157ce9a8c249daa3ddafad322dbf1e
来源:牛客网
输入描述:
物品数量N=5件
重量w分别是
2 2 6 5 4
价值v分别是
6 3 5 4 6
背包承重为M=10
输出描述:
背包内物品最大总和为15
示例1
输入
5
10
2 2 6 5 4
6 3 5 4 6
输出
15
解题方法:动态规划求最优解
二维数组:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
//物品数量为n
// 背包承重为m
int n=scan.nextInt();
int m=scan.nextInt();
//w为重量数组
int[] w =new int[n+1];
//v为价值数组
int[] v=new int[n+1];
for(int i=1; i<=n;i++){
w[i]=scan.nextInt();
}
for(int i=1; i<=n;i++){
v[i]=scan.nextInt();
}
//定义二维数组temp记录背包内最大组合
int[][] temp=new int[n+1][m+1];
for (int i = 1; i<=n; i++) {
for (int j = 1; j<=m ; j++) {
if(j >= w[i]){
/* 当准备加入的新增的商品的容量小于等于当前背包的容量,
v[i-1][j]: 就是上一个单元格的装入的最大值
v[i] : 表示当前商品的价值
v[i-1][j-w[i]] : 装入i-1商品,到剩余空间j-w[i]的最大值
当j>=w[i]时: v[i][j]=max{v[i-1][j], v[i]+v[i-1][j-w[i]]}
*/:
temp[i][j] = Math.max(temp[i-1][j], temp[i-1][j-w[i]] + v[i]);
}
else{
// 当准备加入新增的商品的容量大于 当前背包的容量时,就直接使用上一个单元格的装入策略
temp[i][j]=temp[i-1][j];
}
}
}
System.out.println(temp[n][m]);
}
}
一维数组:
链接:https://www.nowcoder.com/questionTerminal/7e157ce9a8c249daa3ddafad322dbf1e?toCommentId=6585343
来源:牛客网
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//思路一样
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int m=scan.nextInt();
int[] w =new int[n+1];
int[] v=new int[n+1];
for(int i=1; i<=n;i++){
w[i]=scan.nextInt();
}
for(int i=1; i<=n;i++){
v[i]=scan.nextInt();
}
int[] temp = new int[m + 1];
for (int i = 1; i <=n; i++) {
for (int j = m; j >0 ; j--) {
if (j >= w[i]){
temp[j] = Math.max(temp[j], temp[j-w[i]] + v[i]);
}
}
}
System.out.println(temp[m]);
}
}
思路可以参考:https://blog.csdn.net/weixin_44026997/article/details/91044192?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param
或者尚硅谷数据结构:https://www.bilibili.com/video/BV1E4411H73v?p=159