Leetcode474之多條件的揹包問題
阿新 • • 發佈:2022-04-19
Leetcode474-1和0
- 給你一個二進位制字串陣列 strs 和兩個整數 m 和 n 。請你找出並返回 strs 的最大子集的長度,該子集中 最多 有 m 個 0 和 n 個 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
- 輸入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
- 輸出:4
public int findMaxForm(String[] strs, int m, int n) { int[][] dp=new int[m+1][n+1];//m個0 n個1時最大子集 for(int i=0;i<strs.length;i++){ int[] temp=getNum(strs[i]); //倒序遍歷 for (int j = m; j >= temp[0]; j--) { for (int k = n; k >= temp[1]; k--) { dp[j][k] = Math.max(dp[j][k], dp[j - temp[0]][k - temp[1]] + 1); } } } return dp[m][n]; } public int[] getNum(String str){ int[] res=new int[2]; for(int i=0;i<str.length();i++){ if(str.charAt(i)=='0'){ res[0]++; } if(str.charAt(i)=='1'){ res[1]++; } } return res; }