当前位置:网站首页>0-1 knapsack problem
0-1 knapsack problem
2022-07-07 23:35:00 【A little dog】
0-1 knapsack
0 - 1 knapsack problem
1. Looking for maximum value
The standard 01 knapsack 
What is the maximum value of filling ?
- The solution to violence is dps Deep backtracking algorithm ( Load the backpack And no backpack )
- Non violent use dp The equation is dynamically recursive
1.1 Definition dp Array dp[i][j]
i Indicates the column length , That is, different objects appear
j Indicates the president , But the line at this time , For the possibility of loading different weights , in other words 0 It's also possible not to install , therefore (j = Maximum weight + 1)
And the corresponding dp[i][j] There is value .

1.2 Two dimensional array implementation
import java.util.*;
/** * @author JMWANG */
import java.io.*;
class Good {
// value
int value;
// weight
int weight;
Good(int v, int p) {
this.value = v;
this.weight = p;
}
Good() {
}
public void setValue(int v) {
this.value = v;
}
public void setWeight(int p) {
this.weight = p;
}
}
public class Main {
public static void main(String[] args) throws IOException {
// Maximum backpack weight
int n = 4;
// Build items
List listGood = new ArrayList();
listGood.add(new Good(15, 1));
listGood.add(new Good(20, 3));
listGood.add(new Good(30, 4));
//dp Recursive equation construction
int[][] goods = new int[listGood.size()][n + 1];
// for (int i = 0; i < goods.length; i++) {
// System.out.println(Arrays.toString(goods[i]));
// }
dp(n, goods, listGood);
System.out.println(goods[listGood.size() - 1][n]);
}
public static void dp(int N, int[][] dp, List<Good> listGood) {
// The relationship between the upper and lower levels
//dp[i][j] = max(listGood.get(i),)
for (int i = 0; i < listGood.size(); i++) {
for (int j = 0; j < N + 1; j++) {
// initialization dp equation
if (j == 0) {
dp[i][j] = 0;
continue;
}
if (i == 0) {
dp[i][j] = listGood.get(i).weight <= N ? listGood.get(i).value : 0;
continue;
}
// If at present weight j < The weight of the current item , Just directly transfer the weight of the upper layer down
if (j < listGood.get(i).weight) dp[i][j] = dp[i - 1][j];
// If at present weight j >= The weight of the current item , We need to compare
// The value of the vertical layer is greater still On the left + The value of the current item is greater
else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - listGood.get(i).weight] + listGood.get(i).value);
}
LookDP(dp);
System.out.println("______________________________");
}
}
}
public static void LookDP(int[][] goods) {
for (int i = 0; i < goods.length; i++) {
for (int j = 0; j < goods[i].length; j++) {
System.out.print(goods[i][j] + " ");
}
System.out.println();
}
}
}
1.3 One dimensional array implementation
public static void testWeightBagProblem(int N, List<Good> listGood){
int len = listGood.size();
// Definition dp Array ,dp[j] Indicates that the backpack capacity is j when , The greatest value you can get
int[] dp = new int[N +1];
// traversal order : Go through the items first , Then traverse the backpack capacity
for(int i=0;i<len;i++){
for(int j=N;j>=listGood.get(i).weight;j--){
System.out.println(Arrays.toString(dp));
dp[j] = Math.max(dp[j], dp[j-listGood.get(i).weight]+listGood.get(i).value);
}
}
System.out.println(Arrays.toString(dp));
System.out.println(dp[N]);
}
Please correct me if there is any mistake
边栏推荐
- 谷歌浏览器怎么登录及开启同步功能
- MATLAB signal processing [Q & A essays · 2]
- 高效的S2B2C电商系统,是这样帮助电子材料企业提升应变能力的
- Experience sharing of system architecture designers in preparing for the exam: the direction of paper writing
- Interface
- 2022第六季完美童模陕西总决赛圆满落幕
- Mobile heterogeneous computing technology - GPU OpenCL programming (basic)
- List. How to achieve ascending and descending sort() 2020.8.6
- The efficient s2b2c e-commerce system helps electronic material enterprises improve their adaptability in this way
- MySQL Index Optimization Practice I
猜你喜欢

SAP HR 社会工作经历 0023

Explain
![MATLAB signal processing [Q & A essays · 2]](/img/be/0baa92767c3abbda9b0bff47cb3a75.png)
MATLAB signal processing [Q & A essays · 2]

ROS2专题(03):ROS1和ROS2的区别【02】

Matlab SEIR infectious disease model prediction

Deep understanding of MySQL lock and transaction isolation level

Puce à tension stabilisée LDO - schéma de bloc interne et paramètres de sélection du modèle

高效的S2B2C电商系统,是这样帮助电子材料企业提升应变能力的

Design and implementation of spark offline development framework
![给出一个数组,如 [7864, 284, 347, 7732, 8498],现在需要将数组中的数字拼接起来,返回「最大的可能拼出的数字」](/img/21/2e99dd6173ab4925ec22290cd4a357.png)
给出一个数组,如 [7864, 284, 347, 7732, 8498],现在需要将数组中的数字拼接起来,返回「最大的可能拼出的数字」
随机推荐
Mysql索引优化实战二
进度播报|广州地铁七号线全线29台盾构机全部完成始发
Progress broadcast | all 29 shield machines of Guangzhou Metro Line 7 have been launched
Unity3d learning notes 5 - create sub mesh
Vulnerability recurrence ----- 49. Apache airflow authentication bypass (cve-2020-17526)
Open source hardware small project: anxinco esp-c3f control ws2812
Puce à tension stabilisée LDO - schéma de bloc interne et paramètres de sélection du modèle
SLAM面试总结
USB (XV) 2022-04-14
Mysql索引优化实战一
UE4_ Use of ue5 blueprint command node (turn on / off screen response log publish full screen display)
Vs extension tool notes
SAP HR奖罚信息导出
经纬度PLT文件格式说明
做自媒体视频剪辑怎么赚钱呢?
PHP uses Alibaba cloud storage
Freelink open source call center design idea
B_ QuRT_ User_ Guide(38)
Coreseek: the second step is index building and testing
Description of longitude and latitude PLT file format