【动态规划法】硬币找零问题

简介: 【动态规划法】硬币找零问题

 1、题目如下:

【问题描述】

给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], … c[n],假设每种硬币的数量是无限的。同时还有一个总金额 k,编写一个动态规划计算出最少需要几枚硬币凑出这个金额 k?

【样例输入】

12

1 2 5

【样例输出】

3

【样例说明】输入第一行为金额总数,第二行为硬币的不同面值;输出为需要的最少硬币数

2、算法思路

1、方法:动态规划法

2、dp[0]=0,从dp[1]开始,运算直至dp[MoneySum]。

3、动态转移方程:if(i-c[j]>=0) dp[i]=min(dp[i],dp[i-c[j]]+1);

注:输入数据的第二行以'\n'结尾,其中数据以空格间隔(详见代码)。

3、代码如下:

#include <bits/stdc++.h>
using namespace std;
#define N  10000
int MoneySum;//金额和 
int c[N];//硬币金额存储数组 
int dp[N];//所需最少硬币个数存储数组 
int main(){
  cin>>MoneySum;//输入金额和 
  int n=0;//记录硬币种类个数 
  for (int i= 0;i<=9; i++)
  {
    cin >> c[i];
    n++;//硬币种类个数加1 
    if (getchar()=='\n') break;//输入回车,则结束 
  }
  for(int i=0;i<=MoneySum;i++){//赋初值10000 
    dp[i]=N;
  }
  dp[0]=0;//记得将dp[0]初始化为0,当金额为0时,所需最少金币为0 
  for(int i=1;i<=MoneySum;i++){
    for(int j=0;j<n;j++){
      if(i-c[j]>=0) dp[i]=min(dp[i],dp[i-c[j]]+1);
      //cout<<"dp["<<i<<"]:"<<dp[i]<<endl;
    }
  }
  cout<<dp[MoneySum]<<endl;
  return 0;
}

image.gif


目录
相关文章
|
搜索推荐 算法
插入排序算法的平均时间复杂度解析
【10月更文挑战第12天】 插入排序是一种简单直观的排序算法,通过不断将未排序元素插入到已排序部分的合适位置来完成排序。其平均时间复杂度为$O(n^2)$,适用于小规模或部分有序的数据。尽管效率不高,但在特定场景下仍具优势。
|
6月前
|
安全 网络安全 数据安全/隐私保护
DirectX修复工具增强版,免费的dll修复工具,dll下载,DirectX修复工具下载
DirectX修复工具是一款系统级工具软件,支持Windows XP至Windows 11多个操作系统版本,兼容32位和64位系统。程序可自动调整任务模式,无需用户设置,操作简便,点击即可修复DirectX问题。增强版还支持修复C++运行库问题,提供在线修复版和标准版多种选择。遇到如英雄联盟game_error_directx错误或0xc000007b问题时,使用该工具可有效解决。程序具备扩展功能,可通过下载数据包升级为增强版,并提供详细错误提示与修复方案,适用于多种DirectX及C++异常情况。
1302 4
|
运维 监控 开发者
tasklist命令的应用实例
tasklist命令的应用实例 原创
395 7
|
9月前
|
存储 关系型数据库 BI
巧用 Navicat URI,一键实现团队 BI 工作区分享
今天,我们将手把手教大家如何通过Navicat软件实现阿里云 PolarDB 团队快速分享的操作。
|
10月前
|
人工智能 安全 Java
片段式代码VS完整工程生成:飞算JavaAI如何让开发者告别碎片化开发?
飞算 JavaAI 是一款基于大模型的智能开发平台,旨在解决传统开发中的“碎片化困局”。它通过“智能引导开发五步法”,从需求分析到工程代码交付实现全链路智能化。不仅能生成高质量代码片段,更能直接输出可运行的完整工程,帮助开发者摆脱重复性劳动,专注于系统架构设计和业务创新,推动软件开发从“体力劳动”向“脑力创造”转变,开启高效开发新时代。
|
前端开发 小程序 JavaScript
小程序 canvas 生成海报 一次搞掂
小程序 canvas 生成海报 一次搞掂
238 1
|
JavaScript 前端开发 API
移动端滚动分页解决方案
移动端滚动分页解决方案
262 4
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
465 0
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
587 0
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装