牛客题霸 [ 换钱的最少货币数] C++题解/答案

题目描述

给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。
如果无解,请返回-1.
【要求】
时间复杂度O(n×aim),空间复杂度On。

题解:

经典dp问题
我们考虑一下当然价值x由什么组成?
x可以由上一个状态x-arr[i]加上第i’个货币arr[i]组成
也就是dp[x]=dp[x-arr[i]]+1
这个+1也就是代表多用了一个货币(因为题目问的是最少货币数,所以dp[x]表示的是x元所用的最少货币数)
因为arr有多个,所以dp取最小值(记得dp要初始化为最大,但是dp[0]=0)
dp[j]=min(dp[j],dp[j-arr[i]]+1);
最后如果dp[aim]没被改变(还是最大化),说明无法表示aim,即返回-1
否则返回dp[aim]

代码:

class Solution {public:/*** 最少货币数* @param arr int整型vector the array* @param aim int整型 the target* @return int整型*/int minMoney(vector<int>& arr, int aim) {// write code hereif(aim==0)return 0;vector<int>dp(aim+1,0x3f3f3f);dp[0]=0;for(int i=0;i<arr.size();i++){for(int j=arr[i];j<=aim;j++){dp[j]=min(dp[j],dp[j-arr[i]]+1);}}if(dp[aim]==0x3f3f3f)return -1;else return dp[aim];}
};

牛客题霸 [ 换钱的最少货币数] C++题解/答案相关推荐

  1. 牛客题霸 [将字符串转化为整数] C++题解/答案

    牛客题霸 [将字符串转化为整数] C++题解/答案 题目描述 实现函数 atoi .函数的功能为将字符串转化为整数 提示:仔细思考所有可能的输入情况.这个问题没有给出输入的限制,你需要自己考虑所有可能 ...

  2. 牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案

    牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案 题目描述 据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞 ...

  3. 牛客题霸 [输出二叉树的右视图] C++题解/答案

    牛客题霸 [输出二叉树的右视图] C++题解/答案 题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 题解: 分两个过程: 先用前序遍历+中序遍历恢复二叉树,这个应该都会. ...

  4. 牛客题霸 [链表中环的入口节点] C++题解/答案

    牛客题霸 [链表中环的入口节点] C++题解/答案 题目描述 对于一个给定的链表,返回环的入口节点,如果没有环,返回null 拓展: 你能给出不利用额外空间的解法么? 题解: 判断环有个很巧妙的方法, ...

  5. 牛客题霸 [矩阵的最小路径和] C++题解/答案

    牛客题霸 [矩阵的最小路径和] C++题解/答案. 题目描述 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的 ...

  6. 牛客题霸 [ 求二叉树的层序遍历] C++题解/答案

    牛客题霸 [ 求二叉树的层序遍历] C++题解/答案 题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该 ...

  7. 牛客题霸 [ 最长回文子串] C++题解/答案

    牛客题霸 [ 最长回文子串] C++题解/答案 题目描述 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度. 给定字符串A以及它的长度n,请返回最长回文子串的长度. 题解: 两个方法: ...

  8. 牛客题霸 [三个数的最大乘积]C++题解/答案

    牛客题霸 [三个数的最大乘积]C++题解/答案 题目描述 给定一个无序数组,包含正数.负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1). 题解: 有人说 ...

  9. 牛客题霸 [ 旋转数组的最小数字] C++题解/答案

    牛客题霸 [ 旋转数组的最小数字] C++题解/答案 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. NOT ...

最新文章

  1. 趣文:一根网线发起的攻击
  2. 万亿级企业MySQL海量存储分库分表设计实践
  3. androidstudio 日历视图怎么显示农历_记事日历-记事与时间管理工具
  4. Java设计模式之适配器模式
  5. JAVA共通関数--文字列に空白を追加する
  6. python no module name_python导包显示No module named XXX问题
  7. 《2020年AI新基建发展白皮书》重磅发布,展示百度智能云多个落地案例
  8. C语言字符串处理函数
  9. 三点拓宽自己的工作思路
  10. AIDA64 Business Edition 4.00.2700绿色单文件破解版下载
  11. 免费开源字体_7种华丽的免费开源字体以及何时使用它们
  12. 微信登录分享...报错...MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message
  13. Android美化插件,KWGT桌面插件美化
  14. 微信h5游戏如何在微信中做好域名防封 防屏蔽的 工作
  15. 支付宝服务商模式下的支付开发
  16. 芯邦CMB2198A主控U盘量产工具V6000
  17. [转]gcc -ffunction-sections -fdata-sections -Wl,–gc-sections 参数详解
  18. 启用计算机的无线同屏,Windows10如何使用无线同屏功能?
  19. androidstudio虚拟机打不开的解决方法,一路坎坷,靠运气成功的!!!
  20. 【校园招聘】广州百田

热门文章

  1. 多重信号辅助音频分离,让你在嘈杂环境也能指哪听哪儿
  2. 提升代码可读性的 10 个技巧
  3. 计算机和hdmi无法正常显示,HDMI都不灵 为什么电脑连电视效果差?
  4. java aspose重叠_Aspose.Words - 在特定位置合并两个文档
  5. java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)
  6. python程序设计实践教程陈东_Python
  7. promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...
  8. 机器人等级考试一级教具_全国青少年机器人技术等级考试(一级):基本结构...
  9. java十六进制大小端转换_字节顺序
  10. mvc identity连接mysql_asp.net MVC5,如何使用mysql数据库,使用MVC框架中自带的identity用户验证体系...