1. 程式人生 > 其它 >Leetcode474之多條件的揹包問題

Leetcode474之多條件的揹包問題

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;
    }