最少钱币数(凑硬币)详解 您所在的位置:网站首页 水表上的数字是钱数还是吨数 最少钱币数(凑硬币)详解

最少钱币数(凑硬币)详解

2024-07-05 15:19| 来源: 网络整理| 查看: 265

目录

题目:

分析:

C++动态规划算法代码:

总结:

这篇使用动态规划算法来解决这个问题,借这篇博客初窥动态规划算法。最少钱币数问题也可以看作多重背包问题。

那么什么是动态规划算法?

动态规划(dynamic programming,DP)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。(思想也有点像分布式处理)

                                                                                                                                  ———From Baidupedia

那么我们如何去描述它?

动态规划算法通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式时间复杂度, 因此它比回溯法、暴力法等要快许多。

                                                                                                                         ——From 从动态规划新手到专家

概念讲完,开始做题。

题目: 最少钱币数 问题描述这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了 6 种钱币面值为 2、5、10、20、50、100,用来凑 15 元,可以用 5 个 2 元、1个 5 元,或者 3 个 5 元,或者 1 个 5 元、1个 10 元,等等。显然,最少需要 2 个钱币才能凑成 15 元。         你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。输入形式输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值 M(1 =0,v[i] 表示第i个硬币的面值,方程的含义是拿出一个面值为 v[i] 的硬币后,凑够 m-v[i] 元至少需要的硬币数目(dp[m-v[i] ])+1和凑够m元至少需要的硬币数目(dp[m])相比较,取较小的存入dp[m]。

这里可能就会有人问了,为什么还要和dp[m]比较后再存入dp[m],正如上面的例子,因为我们在凑够m元时,可能有多种可行的方案,我们要比较出哪一种方案所需硬币数目最小。例如在4种硬币1、3、5、7元凑8元的时候会有三种方案,1)8个1元;2)3+5元;3)1+7元。我们得从中找到我们所要的答案。(如果用贪心算法的话可能会错过最优解)

有了动态转移方程,问题基本就算解决了。当然,Talk is cheap,show me the code!

C++动态规划算法代码: #include using namespace std; int main() { int coins[10] = {0}; //硬币面值数组,由于题目给出不超过10种,所以我申请了10。 int money = 0; //待凑钱的数值*/ int kind = 0; //钱币种类数目*/ while(1) { cin >> money; if(0 == money)break; //结束标志 int dp[money+1]; //动态规划数组 dp[0] = 0; //初始化第一个元素为0,因为要凑0元需要0个钱币 cin >> kind; //硬币面值种类数 for(int k=0; k> coins[k]; //读入硬币面值,存入数组coins[] } for(int i = 1; i = coins[j] && dp[i - coins[j]] + 1 < dp[i]) { dp[i] = dp[i- coins[j] ] + 1; } 自己干了,不用麻烦min()函数 */ } } if( dp[money] == 99999 ) { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有