動態規劃 leetcode 474 一和零

2021-10-22 15:53:20 字數 1084 閱讀 2908

題目:

給你乙個二進位制字串陣列 strs 和兩個整數 m 和 n 。

請你找出並返回 strs 的最大子集的大小,該子集中 最多 有 m 個 0 和 n 個 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

思路:

動態規劃,類似0-1揹包問題。

選擇:每個字串,要麼選,要麼不選

狀態:0和1的個數

定義:dp[i][j]:使用i個0和j個1,最多能拼出的字串數目。

初始:皆為0

解答:

class

solution

:def

findmaxform

(self, strs: list[

str]

, m:

int, n:

int)

->

int:

iflen

(strs)==0

:return

0#dp[i][j]:使用 i 個 0 和 j 個 1,最多能拼出的字串數目

dp=[[

0for _ in

range

(n+1)]

for _ in

range

(m+1)]

forstr

in strs:

zeros=

str.count(

'0')

ones=

str.count(

'1')

for i in

range

(m,zeros-1,

-1):

for j in

range

(n,ones-1,

-1):

dp[i]

[j]=

max(

1+dp[i-zeros]

[j-ones]

,dp[i]

[j])

return dp[m]

[n]

LeetCode 474 一和零(動態規劃)

給你乙個二進位制字串陣列 strs 和兩個整數 m 和 n 請你找出並返回 strs 的最大子集的大小,該子集中 最多 有 m 個 0 和 n 個 1 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 示例 1 輸入 strs 10 0001 111001 1 0 m 5,n 3...

leetcode 474 一和零 擊敗99 3

在計算機界中,我們總是追求用有限的資源獲取最大的收益。現在,假設你分別支配著 m 個 0 和 n 個 1。另外,還有乙個僅包含 0 和 1 字串的陣列。你的任務是使用給定的 m 個 0 和 n 個 1 找到能拼出存在於陣列中的字串的最大數量。每個 0 和 1 至多被使用一次。注意 給定 0 和 1 ...

01揹包問題之LeetCode474一和零詳解

題目 有n件物品和一個容量為v的揹包。第i件物品的費用是w i 價值是v i 求將哪些物品裝入揹包可使價值總和最大。基本思路 01揹包的特點有兩個 乙個是每件物品有且只有乙個,二是每個物品可以選擇放或者不放。一般狀態轉移方程定義為 dp i j max dp i 1 j dp i 1 j w i v...