Leetcode 322 零钱兑换
题目描述:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
题解:
把amount看作背包容量,把coins[i]看作value[i]为1、weight[i]为coins[i]的物品,这题就是一个完全背包的满包问题,注意好初始化就好了。
AC代码:
class Solution { public: int coinChange(vector<int>& coins, int amount) { long long dp[amount+10]; // 满包问题 for(int i=0;i<=amount;i++) dp[i] = INT_MAX; int Len = coins.size(); dp[0] = 0; for(int i=0;i<Len;i++) { for(int j=coins[i];j<=amount;j++) { dp[j] = min(dp[j],dp[j-coins[i]]+1); } } if(dp[amount] == INT_MAX) return -1; return dp[amount]; } };