当前位置:网站首页>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
边栏推荐
- Mobile heterogeneous computing technology - GPU OpenCL programming (basic)
- RE1 attack and defense world reverse
- Home appliance industry channel business collaboration system solution: help home appliance enterprises quickly realize the Internet of channels
- Description of longitude and latitude PLT file format
- Design and implementation of spark offline development framework
- Anxin vb01 offline voice module access intelligent curtain guidance
- Extended tree (I) - graphic analysis and C language implementation
- 三问TDM
- PHP uses Alibaba cloud storage
- Windows set redis to start automatically
猜你喜欢
PCB wiring rules of PCI Express interface
SAP HR 家庭成员信息
ROS2专题(03):ROS1和ROS2的区别【01】
给出一个数组,如 [7864, 284, 347, 7732, 8498],现在需要将数组中的数字拼接起来,返回「最大的可能拼出的数字」
LM12丨Rolling Heikin Ashi二重K线滤波器
USB (XV) 2022-04-14
Solution of intelligent supply chain collaboration platform in electronic equipment industry: solve inefficiency and enable digital upgrading of industry
Given an array, such as [7864, 284, 347, 7732, 8498], now you need to splice the numbers in the array to return the "largest possible number."
Puce à tension stabilisée LDO - schéma de bloc interne et paramètres de sélection du modèle
Home appliance industry channel business collaboration system solution: help home appliance enterprises quickly realize the Internet of channels
随机推荐
MATLAB signal processing [Q & A essays · 2]
Happy gathering time
Summary of common methods of object class (September 14, 2020)
LDO稳压芯片-内部框图及选型参数
USB (XIV) 2022-04-12
B_ QuRT_ User_ Guide(38)
Spark 离线开发框架设计与实现
Progress broadcast | all 29 shield machines of Guangzhou Metro Line 7 have been launched
欢聚时代一面
13、 System optimization
sql 数据库执行问题
648. Word replacement
Summary of SQL single table query 2020.7.27
Sequence of entity layer, Dao layer, service layer and controller layer
In the field of software engineering, we have been doing scientific research for ten years!
Count the top 10 films at the box office and save them in another file
Markdown
Mysql索引优化实战一
2022注册测绘师备考开始 还在不知所措?手把手教你怎么考?
How to change the formula picture in the paper directly into the formula in word