2. 01揹包問題
AcWing:2. 01揹包問題
01 揹包
每個物品僅有一件,只有選或者不選兩種方案
用子問題定義狀態,即 d p [ i , v ] dp[i, v] dp[i,v] 表示前 i 件物品恰放入一個容量為 v 的揹包可以獲得最大的價值,則其狀態轉移方程是
d p [ i , v ] = m a x ( d p [ i − 1 , v ] , d p [ i − 1 , v − C i ] + W i ) dp[i, v] = max(dp[i - 1, v], dp[i - 1, v - C_i] + W_i) dp[i,v]=max(dp[i−1,v],dp[i−1,v−Ci]+Wi)
優化空間複雜度
虛擬碼
dp[0...v] = 0
for i 1 to N
for v = V to Ci
dp[v] = max(dp[v], dp[v - Ci] + Wi)
AC Code
import java.util.*;
import static java.lang.System.out;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int v = in.nextInt();
int[][] bg = new int[n][2];
for(int i = 0; i < n; i++){
bg[i][0] = in.nextInt();
bg[i][1] = in.nextInt();
}
int[] dp = new int[v + 1];
for(int i = 0; i < n; i++){
for(int j = v; j >= bg[i][0]; j--){
dp[j] = Math.max(dp[j], dp[j - bg[i][0]] + bg[i][1]);
}
}
out.println(dp[v]);
}
}
相關文章
- 揹包問題(01揹包與完全揹包)
- 01揹包問題
- 01 揹包問題
- 01揹包和完全揹包問題解法模板
- 01揹包問題的解決
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 動態規劃 01揹包問題動態規劃
- 【動態規劃】01揹包問題動態規劃
- 動態規劃--01揹包問題動態規劃
- 動態規劃-01揹包問題動態規劃
- 你真的懂01揹包問題嗎?01揹包的這幾問你能答出來嗎?
- 【動態規劃】01揹包問題【續】動態規劃
- 【模板】01揹包、完全揹包
- 01 揹包
- 揹包問題
- 01揹包、完全揹包、多重揹包詳解
- 動態規劃系列之六01揹包問題動態規劃
- 01揹包面試題系列(一)面試題
- 01揹包、有依賴的揹包
- Day 37 | 01揹包問題 、416. 分割等和子集
- 動態規劃-揹包01問題推理與實踐動態規劃
- 01揹包問題理解動態規劃演算法動態規劃演算法
- 揹包九講問題
- 經典揹包問題
- 揹包問題大合集
- 部分揹包問題(挖
- 005多重揹包問題||
- POJ 2184 (01揹包)
- 詳解動態規劃01揹包問題--JavaScript實現動態規劃JavaScript
- 詳解動態規劃01揹包問題–JavaScript實現動態規劃JavaScript
- 2. 揹包,佇列和棧佇列
- 程式碼隨想錄演算法訓練營第41天 | 01揹包問題 二維 、 01揹包問題 一維 、 416. 分割等和子集演算法
- 揹包問題例題總結
- 【leetcode】揹包問題彙總LeetCode
- 01 揹包的變形
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- 程式碼隨想錄演算法訓練營第四十一天|01揹包問題, 01揹包問題—— 滾動陣列,分割等和子集演算法陣列
- OpenJ_Bailian - 2773 採藥(01揹包板題)AI