每日dp理解(04) 類01揹包問題(裝箱問題)

2021-10-09 16:02:49 字數 665 閱讀 4058

先來說說什麼是01揹包吧,揹包是你存放貨物的容器,而01描述了貨物只能拿一次的性質。

在用動態規劃解決本類問題時,首先要明確狀態:當前的貨物是否要裝入揹包。這就引出了dp陣列的含義。狀態方程則是由為了要使裝入揹包貨物的價值盡可大,在每次有可能裝入乙個貨物時,要比較揹包當前的價值,和裝入貨物後的最大價值思想引出。

題目描述

有乙個箱子容量為vvv(正整數,0≤v≤200000 \le v \le 200000≤v≤20000),同時有nnn個物品(0要求nnn個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。

輸入格式

111個整數,表示箱子容量

111個整數,表示有nnn個物品

接下來nnn行,分別表示這nnn個物品的各自體積

輸出格式

111個整數,表示箱子剩餘空間。

輸入輸出樣例

輸入 #1246

83127

97輸出 #1

**如下:

#include

#include

using

namespace std;

int dp[

20001];

int weight[31]

, v, n;

intmain()

01揹包問題 dp

這道題需要從定義去理解 dp i 1 j 定義為 在前i個物品裡面選出來的總體積不大於j的最大的價值 所以這樣就可以知道了,dp i 1 j 就表示在前i個物體裡面選出來的不超過給定體積的最大價值了 所以清楚定義後就有 如果當前超過了當前體積了 那麼他肯定就是dp i 1 j dp i j 了 如果...

01揹包問題(dp)

思路 填表。以下有幾種情況 情況一 第j件放不進去 當前容量i小於第i件物品 這時所得價值為 dp i j dp i j 1 情況二 第j件不放進去 容量足夠 這時所得價值為 dp i j dp i j 1 情況三 第j件放進去 容量足夠 這時所得價值為 dp i weigh j j 1 value...

01揹包問題 DP

有 n件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,每行兩個整數 vi,wi,用...