139.单词拆分
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
vector<bool> dp(s.size()+1,false);
dp[0] =true;
for(int i=1;i<=s.size();i++){
for(int j =0;j<i;j++){
string word = s.substr(j,i-j);//substr(起始位置,截取的个数)
if(find(wordDict.begi2n(),wordDict.end(),word) != wordDict.end() && dp[j]){
dp[i]=true;
}
}
}
return dp[s.size()];
}
};
关于多重背包
多重背包问题,也就是每个物品有数量,由此可以转化为01背包问题
for (int i = 0; i < nums.size(); i++) {
while (nums[i] > 1) { // nums[i]保留到1,把其他物品都展开
weight.push_back(weight[i]);
value.push_back(value[i]);
nums[i]--;
}
}
从而实现: