动态规划问题,主要在于需要想清楚递推关系,num[i][j]表示能使用 i 种硬币时,得到 j 零钱的最优解。

  想来就是首先假设只能使用第一种硬币 1 ,那么会得到num[ 1 : n] = {1,2,3,4.....n},然后在此基础上,我们引入第二种硬币 2 ,考虑num[i][j],此时存在两种情况,即加入硬币是否使得硬币个数减少,答案是肯定的。当然要先判断2能放入多少个,这里设为k个,然后递归求值。

// Study.cpp: 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <string>
#include <algorithm>
#include <sstream>
#include <set>
#include <stack>
#define INT_MAX 2147483647 // maximum (signed) int value
#define INT_MIN (-2147483647 - 1) // minimum (signed) int value
;
#define Min(x,y) (x)<(y)?(x):(y)using namespace std;int Max(int a, int b)
{
return a > b ? a : b;
}void coin_solution(int m, vector<int> &value)
{
int n = value.size()-1;
vector<vector<int>> num(n + 1, vector<int>(m+1,INT_MAX));//for (int j = 1; j <= m; j++)
//  if (num[1][j] % value[1] == 0)
//  num[1][j] = j / value[1];for (int i = 0; i <= n; i++)
num[i][0] = 0;for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if(value[i] <= j)
for (int k = 1; k <= j / value[i]; k++)
num[i][j] = Min(num[i - 1][j], num[i - 1][j - k * value[i]] + k);else
num[i][j] = num[i - 1][j];
}
}for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
if (num[i][j] == INT_MAX)
cout << -1 << " ";
else
cout << num[i][j] << " ";
cout << endl;
}if (num[n][m] != INT_MAX)
cout << num[n][m] << endl;
else
cout << -1 << endl;
}int main()
{
int M = 65;
vector<int> value = {0,1,2,5,21,25};coin_solution(M,value);system("pause");
return 0;
}

  

转载于:https://www.cnblogs.com/Oscar67/p/9400382.html

动态规划——硬币找零相关推荐

  1. 动态规划——硬币找零思路

    找零的两种问题 硬币找零问题,有两种.一种用贪心解决,一种用动态规划解决. 问题1:假设我们有 v1,v2,--,vn(单位是元)这些币值的硬币,它们的张数分别是 c1.c2.-, cn.我们现在要用 ...

  2. 动态规划——硬币找零和币值最大化问题

    一.硬币找零问题 1.问题 有面值为1元.3元和5元的硬币若干枚,给定一个输入面额,问如何采用最少的硬币数目,得到当前面额 2.思路 找出状态转移方程,每次可以拿取1元.3元或者5元的硬币,每次拿取, ...

  3. 找零程序Java_动态规划——硬币找零问题(java)

    如果要求一个问题的最优解(通常是最大值或者最小值),而且该问题能够分解成若干个子问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划. 使用动态规划特征:1.求一个问题的最优解2.大问题可以分解 ...

  4. java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现

    硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...

  5. 硬币找零问题,动态规划基础,百度面试题

    问题描述:给出几种面值的硬币,要求用这几种硬币找零出所给零钱数,用的硬币数要最少. 过去我们用过贪心法解决此类问题,包括本人在百度面试时,也是用的贪心法(面试官对这个解答不满意),贪心法只适用于硬币特 ...

  6. 硬币找零问题的动态规划实现

    一,问题描述 给定一组硬币数,找出一组最少的硬币数,来找换零钱N. 比如,可用来找零的硬币为: 1.3.4   待找的钱数为 6.用两个面值为3的硬币找零,最少硬币数为2.而不是 4,1,1 因此,总 ...

  7. Python 动态规划(DynamicProgramming)-硬币找零

    动态规划(DynamicProgramming)-硬币找零 文章目录 动态规划(DynamicProgramming)-硬币找零 1.动态规划 a.什么是动态规划 b.适用对象 2.硬币找零-Codi ...

  8. 动态规划实战--硬币找零问题

    上一篇文章上提到硬币找零的例子,现在我们实战动态规划就从硬币找零开始 问题描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], - c[n],同时还有一个总金额 k,编写一 ...

  9. 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)

    背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...

  10. 硬币找零 acm入门 day4--动态规划dp第一题

    A - 硬币找零 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资.我们应该注意到,人民币的硬 ...

最新文章

  1. 误差向量幅度(EVM)介绍
  2. 【Python】青少年蓝桥杯_每日一题_7.19_电梯用量
  3. iOS之深度剖析UIScrollView的实现原理与阻尼动画
  4. Tensorflow之安装
  5. linux c 11 运行库,11.1.3 运行库与I/O
  6. 2018 java蓝桥杯校赛题目
  7. linux内核模块签名,linux内核模块签名
  8. node --进行后台的环境搭建
  9. WebService的简单实现
  10. UVA11582 Colossal Fibonacci Numbers!【快速模幂+数列模除】
  11. 【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]
  12. TreeMap、HashMap、LinkedHashMap的区别
  13. html新手练习软件,电脑打字指法练习 有以下软件是可以练习打字速度的:
  14. 【视觉SLAM14讲】【汇总】
  15. 会声会影安装闪退解决办法_会声会影导出时闪退怎么回事 - 卡饭网
  16. c# 指定打开某个路径下的CMD_C# 插入、删除Excel分页符
  17. 计算机编程画图步骤,计算机CAD绘图基础教程
  18. 对计算机硬性环境,温度、湿度、灰尘环境对电脑的影响
  19. 卖西瓜问题(Java经典编程案例)
  20. 【分享】找回word文档保护密码

热门文章

  1. SOA进入成熟应用阶段仍需时日
  2. Illustrator 教程,如何在 Illustrator 中描摹对象?
  3. 如何在 Mac 上使用“旁白实用工具”自定“旁白”?
  4. 如何将所有音乐从 iPhone传输到Mac?
  5. iOS开发之开发者账号的申请进度跟进(申请的询问)
  6. 如何在Mac上使用Memoji贴纸、屏幕效果、应用程序和Messages
  7. Adobe系列错误代码解决方案汇总
  8. 第十一次课:Python函数(二)
  9. MVC通过重写OnActionExecuting获取控制器,方法和域
  10. freeswitch 电话会议