✏️ 纠错
第 201 题 / 共 226 题
第10 题 下面代码采用动态规划求解零钱兑换问题:给定n种硬币,第i种硬币的面值为coins[i- 1],目标金额为amt,每种硬币可以重复选取,求能够凑出目标金额的最少硬币数量;如果不能凑出目标金额,返回-1。
int coinChangeDPComp(vector<int>& coins, int amt) {
int n = coins.size();
int MAX = amt + 1;
vector<int> dp(amt + 1, MAX);
dp[0] = 0;
for (int i = 1; i <= n; i++) {
for (int a = 1; a <= amt; a++) {
if (coins[i - 1] > a)
dp[a] = dp[a];
else
dp[a] = min(dp[a], dp[a - coins[i - 1]] + 1);
}
}
return dp[amt] != MAX ? dp[amt] : -1;
}你真棒!
📝 题目解析
【答案】正确
【考纲知识点】动态规划知识
【详细解析】n种硬币,每种硬币可以无限使用,是经典的完全背包问题。