題目:
給你乙個二進位制字串陣列 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...