当前位置: 首页 > news >正文

经典算法 求解硬币组成问题

求解硬币组成问题

题目描述

实现一个算法求解组成硬币问题。介绍如下:

假设有面值给定的一些硬币,以及给定的总合值,问构成总合值的方法有多少种。


输入描述

  • 第一行包含两个数字 N, M
    • N 表示硬币面值的种类数
    • M 表示给定的总合值
  • 第二行包含 N 个数字 Ai,表示每种硬币的面值。

数据范围:

  • 1 ≤ N, M, Ai ≤ 1000
  • 每种面值的硬币都有无限多个

输出描述

输出一行,为构成总合值的方法数。


输入输出样例

输入

3 3
1 2 3

输出

3

c++代码

#include<bits/stdc++.h>using namespace std;int main() {int N, M;cin >> N >> M;vector<int> dp(M + 1), arr(N);for (int i = 0; i < N; i++) cin >> arr[i];dp[0] = 1;for (int i = 0; i < N; i++) {for (int j = arr[i]; j <= M; j++) {dp[j] += dp[j - arr[i]];}}dp[0] = 0;cout << dp[M];return 0;
}//by wqs

算法解析

这个题目要求1 2和2 1是同一组合,所有我们规定第一层循环为前i个硬币而且,最后一个硬币是i的组合为多少,这样就不会出现2 1这样的情况了。

相关文章:

  • 基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告
  • 软件测评如何保障质量与提升体验?从五方面详细说说
  • JSON 处理笔记
  • 接上篇,解决FramePack启动报错:“httpx.ReadError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。“的问题
  • 在c++中,char定义的变量取地址时,为什么会输出 “烫烫烫...“?
  • 【在Spring Boot中集成Redis】
  • LeetCode - 1137.第N个泰波那契数
  • 学习黑客色即是空
  • python使用cv2在图片上标点
  • 二、shell脚本--变量与数据类型
  • c++_2011 NOIP 普及组 (1)
  • WebSocket分布式实现方案
  • 【LLaMA-Factory实战】1.3命令行深度操作:YAML配置与多GPU训练全解析
  • 数据库 1.0
  • wpf CommandParameter 传递MouseWheelEventArgs参数 ,用 MvvmLight 实现
  • 里氏替换原则(LSP)
  • Java 网络安全新技术:构建面向未来的防御体系
  • 强化学习--2.数学
  • 【Java学习】通配符?
  • 内存性能测试方法
  • 习近平致电祝贺默茨当选德国联邦总理
  • 外交部:中方和欧洲议会决定同步全面取消对相互交往的限制
  • 美国内政部长:今年夏天美国可能发生西班牙式大停电,全怪拜登
  • 执掌伯克希尔60年,股神巴菲特宣布年底交出最终决定权:阿贝尔将接任CEO
  • 韩国前国务总理韩德洙正式宣布参加总统选举
  • 魔都眼|买买买,老铺黄金新店开业被挤爆:有人排队5小时