华为题:零钱兑换

给定不同面额的硬币 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;
}
相关推荐
ZhengEnCi2 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考2 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长4 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满5 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor5 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David5 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事1265 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI5 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..6 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录6 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法