三種基本揹包問題

2021-10-07 09:32:16 字數 2571 閱讀 1905

問題描述:有n件物品和容量為m的揹包 給出i件物品的重量以及價值 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 。

特點:這是最簡單的揹包問題,特點是每個物品只有一件供你選擇放還是不放。

① 二維解法

設f[i][j]表示前 i 件物品 總重量不超過 j 的最大價值 可得出狀態轉移方程

f[i][j]=max

**: 

for(int i=1;i<=n;i++)

for(int j=m;j>0;j--)

在一些情況下 題目的資料會很大 因此f陣列不開到一定程度是沒有辦法ac。

②一維解法

設f[j]表示重量不超過j公斤的最大價值 可得出狀態轉移方程

f[j]=max

**:

for(int i=

1;i<=n;i++

)

問題描述:有n件物品和容量為m的揹包 給出i件物品的重量以及價值 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 。

特點:題幹看似與01一樣 但它的特點是每個物品可以無限選用

設f[j]表示重量不超過j公斤的最大價值 可得出狀態轉移方程

f[j] = maxj

**:

for(

int i=

1;i<=n;i++

)for

(int j = a[i]

;j <= m;j++

)

問題描述:有n件物品和容量為m的揹包 給出i件物品的重量以及價值 還有數量 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 。

特點 :它與完全揹包有類似點 特點是每個物品都有了一定的數量

狀態轉移方程為:

f[j] = max

for

(int i=

1;i<=n;i++

)for

(int j=m;j>=a[i]

;j--

)for

(int k=

0;k<=c[i]

;k++

)

題目一:322. 零錢兌換

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。 你可以認為每種硬幣的數量是無限的。

示例 1:

輸入:coins = [1, 2, 5], amount = 11

輸出:3

解釋:11 = 5 + 5 + 1

public

intcoinchange

(int

coins,

int amount)

}return dp[amount]

==100000?-

1: dp[amount]

;}

力扣(leetcode)

題目:給定不同面額的硬幣和乙個總金額。寫出函式來計算可以湊成總金額的硬幣組合數。假設每一種面額的硬幣有無限個。

示例 1:

輸入: amount = 5, coins = [1, 2, 5]

輸出: 4

解釋: 有四種方式可以湊成總金額:

5=55=2+2+1

5=2+1+1+1

5=1+1+1+1+1

public

intchange

(int amount,

int[

] coins)

}return dp[amount]

;}

題目三:

416. 分割等和子集 給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。

示例 1:

輸入: [1, 5, 11, 5]

輸出: true

解釋: 陣列可以分割成 [1, 5, 5] 和 [11].

示例 2:

輸入: [1, 2, 3, 5]

輸出: false

解釋: 陣列不能分割成兩個元素和相等的子集.

public

boolean

canpartition

(int

nums)

}return dp[sum]

==sum;

}

三種基本揹包問題

問題描述 有n件物品和容量為m的揹包 給出i件物品的重量以及價值 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 特點 這是最簡單的揹包問題,特點是每個物品只有一件供你選擇放還是不放。如果想不通 就填表觀察過程。輸入 5 10 2 62 3 6 55 4 4 6輸出 15 二維解法 設f i j...

混合三種揹包問題

問題 如果將01揹包 完全揹包 多重揹包混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?01揹包與完全揹包的混合 考慮到在01揹包和完全揹包中最後給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一...

混合三種揹包問題

問題 如果將01揹包 完全揹包 多重揹包混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?01揹包與完全揹包的混合 考慮到在01揹包和完全揹包中最後給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一...