博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划:硬币找零
阅读量:4093 次
发布时间:2019-05-25

本文共 1207 字,大约阅读时间需要 4 分钟。

硬币找零问题,我们在贪心算法那一节中讲过一次。我们今天来看一个新的硬币找零问题。假设我们有几种不同币值的硬币 v1,v2,……,vn(单位是元)。如果我们要支付 w 元,求最少需要多少个硬币。比如,我们有 3 种不同的硬币,1 元、3 元、5 元,我们要支付 9 元,最少需要 3 个硬币(3 个 3 元的硬币)。

思路分析:

  • 非常简单的动态规划表,统计在上一次情况的基础上,加上一枚1或3或5金额硬币之后的情况。如果该行有等于money的情况,返回即可(说明加到本轮,已经可以满足)。
    在这里插入图片描述
  • 代码实现
// Example program#include 
#include
using namespace std;int minCoins(int money){
if (money == 1 || money == 3 || money == 5) return 1; vector
> state(money); for (auto &row : state) row.resize(money + 1); if (money >= 1) state[0][1] = true; if (money >= 3) state[0][3] = true; if (money >= 5) state[0][5] = true; for (int i = 1; i < money; i++) {
for (int j = 1; j <= money; j++) {
if (state[i - 1][j]) {
if (j + 1 <= money) state[i][j + 1] = true; if (j + 3 <= money) state[i][j + 3] = true; if (j + 5 <= money) state[i][j + 5] = true; if (state[i][money]) return i + 1; } } } return money;}int main(){
cout << minCoins(9) << endl; return 0;}

转载地址:http://recii.baihongyu.com/

你可能感兴趣的文章
Node.js-模块和包
查看>>
Node.js核心模块
查看>>
express的应用
查看>>
NodeJS开发指南——mongoDB、Session
查看>>
Express: Can’t set headers after they are sent.
查看>>
2017年,这一次我们不聊技术
查看>>
实现接口创建线程
查看>>
Java对象序列化与反序列化(1)
查看>>
HTML5的表单验证实例
查看>>
JavaScript入门笔记:全选功能的实现
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>