Day 46 动态规划
139. 单词拆分
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
vector<bool> dp(s.size() + 1, false);
dp[0] = true;
for (int i = 1; i < dp.size(); i++)
{
for (int j = 0; j < i; j++)
{
string word = s.substr(j, i - j);
if (wordSet.find(word) != wordSet.end() && dp[j])
{
dp[i] = true;
}
}
}
return dp.back();
}
};
多重背包
有N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi 。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。
多重背包可以转换为0-1背包来解答