挑戰dp 一和零(動態規劃)

2021-10-01 16:51:56 字數 986 閱讀 7829

474. 一和零

在計算機界中,我們總是追求用有限的資源獲取最大的收益。

現在,假設你分別支配著 m 個 0 和 n 個 1。另外,還有乙個僅包含 0 和 1 字串的陣列。

你的任務是使用給定的 m 個 0 和 n 個 1 ,找到能拼出存在於陣列中的字串的最大數量。每個 0 和 1 至多被使用一次。

注意:給定 0 和 1 的數量都不會超過 100。

給定字串陣列的長度不會超過 600。

示例 1:

輸入: array = , m = 5, n = 3

輸出: 4

解釋: 總共 4 個字串可以通過 5 個 0 和 3 個 1 拼出,即 "10","0001","1","0" 。

示例 2:

輸入: array = , m = 1, n = 1

輸出: 2

解釋: 你可以拼出 "10",但之後就沒有剩餘數字了。更好的選擇是拼出 "0" 和 "1" 。

題目鏈結(leetcode)

思路:這是乙個變形的01揹包問題,只是多了乙個狀態,對於每乙個字串,都可以選和不選。定義乙個三維陣列,dp[i][j][k]表示擁有i個1、j個0在第k個陣列之前可拼出的字串最大數量。

1、如果當前的i個1、j個0多於或等於第k個字串的01數量,可拼湊第k個字串,第k個字串的0、1個數為cnt0、cnt1,即dp[i][j][k]=dp[i-cnt][j-cnt0][k-1]。

2、如果當前的01個數無法拼湊出第k個字串,此時的最大數為當前的01個數到第k-1個字串為止的最大數,即dp[i][j][k]=dp[i][j][k-1]。

class solution 

}} return dp[n][m][strs.length];

}private int getcnt0(string s)

}

474 一和零(動態規劃)

474.一和零 author wsq date 2020 10 11 計算機界中,我們總是追求用有限的資源獲取最大的收益。現在,假設你分別支配著 m 個 0 和 n 個 1。另外,還有乙個僅包含 0 和 1 字串的陣列。你的任務是使用給定的 m 個 0 和 n 個 1 找到能拼出存在於陣列中的字串的...

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 一和零

題目 給你乙個二進位制字串陣列 strs 和兩個整數 m 和 n 請你找出並返回 strs 的最大子集的大小,該子集中 最多 有 m 個 0 和 n 個 1 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 思路 動態規劃,類似0 1揹包問題。選擇 每個字串,要麼選,要麼不選 狀...