3758765678 2024-07-18 15:26 采纳率: 20%
浏览 7

C++剪枝问题凑钱方案数

img


题目描述
给出 n 个硬币及其面额(同面额可能有多个),问使用这 n 个硬币,有多少种不同的方案可以凑出 k 块钱。若一种也无法凑出,请输出 −1。

(无视面额是否相同,只要使用了不同的硬币即视为不同方案)

如对于 n=5,硬币:1 2 2 2 3,凑 k=3 块钱,答案应为 4。

输入格式
第一行两个整数
n 和 k,表示硬币数量及目标金额。
第二行
n 个整数,表示每个硬币的面额。
输出格式
输出有多少种不同的方案可以凑出
𝑘
k 块钱。若一种也无法凑出,请输出
−1。

样例
输入数据 1
5 3
1 2 2 2 3
输出数据 1
4

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-18 15:26
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    好的,让我们一步一步来解决这个问题。

    1. 理解题目要求

    题目要求我们计算使用给定硬币面额凑出特定金额的不同方案数。这里的关键是“不同方案”,意味着即使硬币面额相同,只要它们是不同的硬币,也被视为不同的方案。

    2. 输入处理

    我们需要读取两个整数(硬币数量和目标金额),然后读取n个整数表示每个硬币的面额。

    3. 算法设计

    我们可以使用回溯算法来解决这个问题,并在必要时进行剪枝。基本思路是:

    • 从第一个硬币开始,考虑是否使用这个硬币。
    • 如果使用,递归考虑剩下的硬币和减少的目标金额。
    • 如果不使用,继续考虑下一个硬币。
    • 在递归过程中,如果目标金额变为负或硬币用完但金额未达到0,则回溯并尝试其他选项。

    4. 输出结果

    最后,输出凑钱方案的数量。如果无法凑出目标金额,则输出-1。

    C++代码实现

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int count = 0; // 全局变量,用于记录方案数
    
    void countWays(vector<int>& coins, int index, int amount, int n) {
        if (amount == 0) {
            count++;
            return;
        }
        if (index == n || amount < 0) {
            return;
        }
    
        // 选择当前硬币
        countWays(coins, index + 1, amount - coins[index], n);
        // 不选择当前硬币
        countWays(coins, index + 1, amount, n);
    }
    
    int main() {
        int n, k;
        cin >> n >> k;
        vector<int> coins(n);
        for (int i = 0; i < n; i++) {
            cin >> coins[i];
        }
    
        countWays(coins, 0, k, n);
    
        if (count == 0) {
            cout << -1 << endl;
        } else {
            cout << count << endl;
        }
    
        return 0;
    }
    

    代码解释

    1. 全局变量 count 用于记录不同的凑钱方案数。
    2. 函数 countWays 是一个递归函数,用于探索所有可能的凑钱方案。
      • coins 是硬币面额的数组。
      • index 是当前考虑的硬币的索引。
      • amount 是当前需要凑出的金额。
      • n 是硬币的总数。
    3. 主函数 main 读取输入数据,并调用 countWays 函数。
    4. 输出结果:如果 count 为0,则输出-1,表示无法凑出目标金额;否则输出 count

    这个程序通过递归和剪枝的方式,有效地计算出使用给定硬币面额凑出特定金额的不同方案数。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月18日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?