华为题:零钱兑换

给定不同面额的硬币 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;
}
相关推荐
Logic1011 小时前
C语言/数据结构组合数学题解:数字好排列计数——质数倍数分类与阶乘取模
c语言·数据结构·算法·组合数学·时间复杂度·排列·取模运算
碧海银沙音频科技研究院2 小时前
炬芯ATS3089智能手表烧录方法
人工智能·驱动开发·嵌入式硬件·算法
维克兜率天2 小时前
【维克】统计套利:寻找市场的“定价误差“
人工智能·python·算法
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 1. 两数之和(哈希表解法总结)
c++·算法·leetcode
楚识科技2 小时前
票据 OCR 识别技术深度解析:从算法原理到企业级落地实现
算法·ocr
longlongzihan2 小时前
LeetCode 25. K 个一组翻转链表 (迭代+分组反转法)
算法·leetcode·链表
xuxigifxfh2 小时前
牛客:BISHI8 大整数哈希
java·算法·哈希算法
涉密IT资质笔记2 小时前
涉密资质投入产出分析模型:时间成本、四块成本构成与 ROI 决策框架
java·开发语言·算法
木井巳2 小时前
【BFS 解决拓扑排序】火星词典
java·算法·leetcode·广度优先·宽度优先·图搜索算法