动态规划——硬币找零
动态规划问题,主要在于需要想清楚递推关系,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:假设我们有 v1,v2,--,vn(单位是元)这些币值的硬币,它们的张数分别是 c1.c2.-, cn.我们现在要用 ...
- 动态规划——硬币找零和币值最大化问题
一.硬币找零问题 1.问题 有面值为1元.3元和5元的硬币若干枚,给定一个输入面额,问如何采用最少的硬币数目,得到当前面额 2.思路 找出状态转移方程,每次可以拿取1元.3元或者5元的硬币,每次拿取, ...
- 找零程序Java_动态规划——硬币找零问题(java)
如果要求一个问题的最优解(通常是最大值或者最小值),而且该问题能够分解成若干个子问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划. 使用动态规划特征:1.求一个问题的最优解2.大问题可以分解 ...
- java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现
硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...
- 硬币找零问题,动态规划基础,百度面试题
问题描述:给出几种面值的硬币,要求用这几种硬币找零出所给零钱数,用的硬币数要最少. 过去我们用过贪心法解决此类问题,包括本人在百度面试时,也是用的贪心法(面试官对这个解答不满意),贪心法只适用于硬币特 ...
- 硬币找零问题的动态规划实现
一,问题描述 给定一组硬币数,找出一组最少的硬币数,来找换零钱N. 比如,可用来找零的硬币为: 1.3.4 待找的钱数为 6.用两个面值为3的硬币找零,最少硬币数为2.而不是 4,1,1 因此,总 ...
- Python 动态规划(DynamicProgramming)-硬币找零
动态规划(DynamicProgramming)-硬币找零 文章目录 动态规划(DynamicProgramming)-硬币找零 1.动态规划 a.什么是动态规划 b.适用对象 2.硬币找零-Codi ...
- 动态规划实战--硬币找零问题
上一篇文章上提到硬币找零的例子,现在我们实战动态规划就从硬币找零开始 问题描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], - c[n],同时还有一个总金额 k,编写一 ...
- 最少硬币找零系列问题(01背包,完全背包,多重背包动态规划)
背包问题思路解决最小硬币找零系列问题. 一.01硬币找零问题(01背包) 给定不同面额的硬币 coins 和总金额 m.每个硬币最多选择一次.计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬 ...
- 硬币找零 acm入门 day4--动态规划dp第一题
A - 硬币找零 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资.我们应该注意到,人民币的硬 ...
最新文章
- 误差向量幅度(EVM)介绍
- 【Python】青少年蓝桥杯_每日一题_7.19_电梯用量
- iOS之深度剖析UIScrollView的实现原理与阻尼动画
- Tensorflow之安装
- linux c 11 运行库,11.1.3 运行库与I/O
- 2018 java蓝桥杯校赛题目
- linux内核模块签名,linux内核模块签名
- node --进行后台的环境搭建
- WebService的简单实现
- UVA11582 Colossal Fibonacci Numbers!【快速模幂+数列模除】
- 【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]
- TreeMap、HashMap、LinkedHashMap的区别
- html新手练习软件,电脑打字指法练习 有以下软件是可以练习打字速度的:
- 【视觉SLAM14讲】【汇总】
- 会声会影安装闪退解决办法_会声会影导出时闪退怎么回事 - 卡饭网
- c# 指定打开某个路径下的CMD_C# 插入、删除Excel分页符
- 计算机编程画图步骤,计算机CAD绘图基础教程
- 对计算机硬性环境,温度、湿度、灰尘环境对电脑的影响
- 卖西瓜问题(Java经典编程案例)
- 【分享】找回word文档保护密码
热门文章
- SOA进入成熟应用阶段仍需时日
- Illustrator 教程,如何在 Illustrator 中描摹对象?
- 如何在 Mac 上使用“旁白实用工具”自定“旁白”?
- 如何将所有音乐从 iPhone传输到Mac?
- iOS开发之开发者账号的申请进度跟进(申请的询问)
- 如何在Mac上使用Memoji贴纸、屏幕效果、应用程序和Messages
- Adobe系列错误代码解决方案汇总
- 第十一次课:Python函数(二)
- MVC通过重写OnActionExecuting获取控制器,方法和域
- freeswitch 电话会议