题解 | #兑换零钱(二)#

兑换零钱(二)

https://www.nowcoder.com/practice/521cead04d1442899767578c3aa395f0

#include <vector>
class Solution {
public:
    //完全背包-种数-组合数
    //dp[j]:总金额为j,在nums存储的硬币面额中,有dp[j]种 组合 方式。
    //递推公式:求种数的问题,递推公式为dp[j]=dp[j] + dp[j-num[i] ]。原因详见代码随想录的“目标和”章节。
    //遍历顺序:外层物品,内层容量。如果内层是物品的话,会导致变成排列。由于是完全背包,物品可以重复使用,因此内层容量为正遍历。
    //初始化:dp[0]=1,目的是点燃“原初之火”,而其他都初始化为0,否则在递推的过程中会被反复叠加。
    //举例:5,[1,2,4,5]
    //物品1:dp=1,
    int change(int target, vector<int>& nums) {
        vector<int>dp(target+1,0);
        dp[0]=1;
        for(auto num:nums)
        {
            for(int j=num;j<dp.size();j++)//背包体积如果比当前物品小那就压根不用遍历了。
            {
                dp[j]+=dp[j-num];
            }
        }
        return dp[target];
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务