代码随想录算法训练营第四十六天|动态规划part08|139.单词拆分● 关于多重背包,你该了解这些! ● 背包问题总结篇!

139.单词拆分 Word Break - LeetCode

完全背包问题:长度为i的字符串,能被下面单词组成,dp[i]为true

dp[0]为空字符串

i表示子串长度

if ([j, i] && dp[j] == true) 如果区间 j-i && dp[j]为true的话

dp[0] = true;非0下标都是false

求组合数

求排列数

对顺序有要求:排列数

先遍历背包再遍历物品

for (int i = 1; i <= s.length; i++)//背包string长度

        for (int j = 0; j < i; j++)//物品,就是一个个的单词

                string word = s.substring(j, i- j);//以j为起点,s.substring()左闭右开的区间

                if (wordSet.contains(word) && dp[j] == true)

                        dp[i] = true;

打印dp数组

class Solution {
    public boolean wordBreak(String s, List wordDict) {
        Set set = new HashSet<>(wordDict);
        boolean[] dp = new boolean[s.length() + 1];
        dp[0] = true;

        for (int i = 1; i <= s.length(); i++) {
            for (int j = 0; j < i; j++) {
                String word = s.substring(j, i);
                if (set.contains(word) && dp[j] == true) {
                    dp[i] = true;
                }
            }
        }
        return dp[s.length()];
    }
}

●  关于多重背包,你该了解这些! 

有N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi 。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。

多重背包和01背包是非常像的, 为什么和01背包像呢?

每件物品最多有Mi件可用,把Mi件摊开,其实就是一个01背包问题了。

●  背包问题总结篇!  

代码随想录算法训练营第四十六天|动态规划part08|139.单词拆分● 关于多重背包,你该了解这些! ● 背包问题总结篇!_第1张图片

 

 代码随想录算法训练营第四十六天|动态规划part08|139.单词拆分● 关于多重背包,你该了解这些! ● 背包问题总结篇!_第2张图片

 

你可能感兴趣的:(动态规划,算法)