☰
华为题:零钱兑换
2026/10/14 3:45:01 网站建设 项目流程

给定不同面额的硬币coins和一个总金额amount,请计算凑成总金额所需的最少硬币个数。

如果没有任何一种硬币组合能组成总金额,输出-1。

每种硬币的数量是无限的。

输入描述

第一行输入一个整数n,表示硬币种类数。

第二行输入n个整数,表示硬币面额。

第三行输入一个整数amount,表示总金额。

输出描述

输出最少硬币个数,若无法凑成则输出-1。

示例 1

输入

text

3 1 2 5 11

输出

text

3

说明

11 = 5 + 5 + 1,共 3 枚硬币。

C++ 解法

cpp

#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> coins(n); for (int i = 0; i < n; i++) cin >> coins[i]; int amount; cin >> amount; vector<int> dp(amount + 1, INT_MAX); dp[0] = 0; for (int i = 1; i <= amount; i++) { for (int coin : coins) { if (i >= coin && dp[i - coin] != INT_MAX) { dp[i] = min(dp[i], dp[i - coin] + 1); } } } cout << (dp[amount] == INT_MAX ? -1 : dp[amount]) << endl; return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询