美文网首页
背包系列问题4——二维背包

背包系列问题4——二维背包

作者: 抬头挺胸才算活着 | 来源:发表于2020-08-17 16:16 被阅读0次

参考资料:
1. 动态规划之背包问题系列
2. #### 一和零

    public int findMaxForm(String[] strs, int m, int n) {
        int numOfChoice = strs.length;

        // int[][][] dp = new int[numOfChoice+1][m+1][n+1];
        //
        // for (int i = 1; i <= numOfChoice; i++) {
        //     int w0 = (int)strs[i-1].chars().filter(x -> x == '0').count();
        //     int w1 = (int)strs[i-1].chars().filter(x -> x == '1').count();
        //
        //     for (int j = 0; j <= m; j++) {
        //         for (int k = 0; k <= n; k++) {
        //             int left0 = j - w0;
        //             int left1 = k - w1;
        //             if(left0 >= 0 && left1 >= 0) {
        //                 dp[i][j][k] = Math.max(dp[i - 1][j][k], dp[i - 1][left0][left1] + 1);
        //             }else{
        //                 dp[i][j][k] = dp[i - 1][j][k];
        //             }
        //         }
        //     }
        // }
        //
        // return dp[numOfChoice][m][n];

        int[][] dp = new int[m+1][n+1];

        for (int i = 1; i <= numOfChoice; i++) {
            int w0 = (int)strs[i-1].chars().filter(x -> x == '0').count();
            int w1 = (int)strs[i-1].chars().filter(x -> x == '1').count();

            for (int j = m; j >= 0; j--) {
                for (int k = n; k >= 0; k--) {
                    int left0 = j - w0;
                    int left1 = k - w1;
                    if(left0 >= 0 && left1 >= 0) {
                        dp[j][k] = Math.max(dp[j][k], dp[left0][left1] + 1);
                    }
                }
            }
        }

        return dp[m][n];
    }

相关文章

网友评论

      本文标题:背包系列问题4——二维背包

      本文链接:https://www.haomeiwen.com/subject/neuqjktx.html