LeetCode 322. 零钱兑换 完全背包

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1

示例 1:

输入: coins = [1, 2, 5], amount = 11

输出: 
3
 
解释: 11 = 5 + 5 + 1

示例 2:

输入: coins = [2], amount = 3

思路:

因为每种钱币可以无限次用,dpj代表凑成j所需要的最小数目,那么我们可写成dpj=min(dp[j],dp[j-coins[i]]+1),代表选与不选第i个。

代码:

class Solution {
public:
    int dp[100000];
    int coinChange(vector& coins, int amount) {
        for(int i=0;i<=10000-1;i++)dp[i]=99999999;
        dp[0]=0;
        for(int i=0;i

 

你可能感兴趣的:(ACM动态规划)