该题是完全背包问题,不需要考虑物品放入背包的先后顺序。
具体代码如下:
class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<int>dp(amount+1,0);
dp[0]=1;
for(int i=0;i<coins.size();i++)
{
for(int j=coins[i];j<=amount;j++)
{
dp[j]+=dp[j-coins[i]];
}
}
return dp[amount];
}
};
本题是完全背包问题,要考虑物品放入背包的先后顺序,因此要先遍历背包再遍历物品。
具体代码如下:
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
vector<int>dp(target+1,0);
dp[0]=1;
for(int i=0;i<=target;i++)
{
for(int j=0;j<nums.size();j++)
{
if(i-nums[j]>=0&&dp[i]<INT_MAX-dp[i-nums[j]]){dp[i]+=dp[i-nums[j]];}
}
}
return dp[target];
}
};
本文讨论了LeetCode中的两道完全背包问题题目:第518题无需考虑顺序,使用动态规划求解;第377题需考虑顺序,采用先背包后物品的遍历策略。给出了相应的C++代码实现。
1325

被折叠的 条评论
为什么被折叠?



