当前位置: 首页 > 知识库问答 >
问题:

转硬币

淳于博
2023-03-14

我正试图解决一个经典的动态规划硬币兑换问题。这是一个家庭作业问题,我不是在寻找完整的解决方案,只是想找几个指针看看我做错了什么。

输入:

  • 金额x我们想用硬币支付一些价值
  • 集合d表示面值(1c、5c、10c、25c、100c、200c)的可用硬币数量

输出:

  • 需要换手支付的最低硬币数。

假设:

  • 收银机操作员有无限的硬币供应,知道如何给最佳的变化。

到目前为止,我试图做的是:

我试图建立一个数组C,使得每个元素C[i],是 /minimum/数量的硬币,交换手的数量i。

C[0]=0

对于C[i],我计算它的方法是,对于所有可用面额的硬币,取所有C[i-di]加1的最小值。然后,我从可用硬币中取出硬币。

这种方法似乎适用于简单的情况,但当我有以下情况时,例如:

99 99 0 0 0 1 0

我的方法失败了,因为用1美元兑换2枚硬币比用99美分(99枚硬币兑换)更“便宜”。

任何指点都将不胜感激。

共有2个答案

谭富
2023-03-14

要点:你可以对硬币进行重复。

解决方案:构建一个数组,其中ARR[i]=生成值i的最小硬币数。

一些伪代码:

ARR[MAX] = {MAXIMUM VALUE} // set all elements in the array to have some big value
ARR[0] = 0

for C in coins
 for i = 0; i <= needed_value; ++i
   if i+C <= needed_value && ARR[i+C] > ARR[i]+1
     ARR[i+C] = ARR[i]+1

Example:
coins = {1, 3}
needed_value = 8
ARR[] = 0 INF INF INF INF INF INF INF INF
after using the coin with value 3, we will have
ARR[] = 0 INF INF 1 INF INF 2 INF INF
after using the coin with value 1, we will have
ARR[] = 0 1 2 1 2 3 2 3 4
=> we need 4 coins to make the sum
欧阳洲
2023-03-14

问题似乎是,当你找到你想要的价值时,你就会停下来。如果您继续,计算出使值大于x的最小硬币数,然后将最小硬币数添加到该值上,以便注册操作员进行适当更改,并从这个较大的列表中获取最小硬币数,您应该能够回答这个问题。

编辑:如果使用两个数组,一个用于可以生成的值,另一个用于寄存器可以生成的值,则可以稍微简化此操作。然后你可以通过某种方式比较它们来得到你的答案。

 类似资料:
  • 本文向大家介绍用css实现一个硬币旋转的效果?相关面试题,主要包含被问及用css实现一个硬币旋转的效果?时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 本文向大家介绍手写一个使用css3旋转硬币的效果相关面试题,主要包含被问及手写一个使用css3旋转硬币的效果时的应答技巧和注意事项,需要的朋友参考一下

  • 硬盘回收站用于存放用户删除的硬盘文件。 回收站中主机和硬盘文件默认保存3天,如有误删除的主机或硬盘文件需要在3天内进行恢复操作,可以将其恢复到原来位置,超过3天后,文件将被彻底删除。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “主机/回收站/硬盘” 菜单项,进入硬盘回收站列表。 清除 当确定回收站中的硬盘文件无用后,可使用清除功能立即彻底删除文件。 清除单个硬盘 单击 “清除”

  • 硬盘是虚拟机的存储文件。 硬盘是虚拟机的存储文件。硬盘根据位置可分为本地硬盘和云硬盘,其中要求本地硬盘与虚拟机处于同一宿主机。本地硬盘不支持在硬盘列表中新建、挂载和卸载。要求云硬盘与虚拟机处于相同可用区,云硬盘支持新建、挂载、卸载、扩容、删除等操作。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “主机/存储/硬盘” 菜单项,进入硬盘页面。 新建硬盘 该功能用于创建硬盘,新创建的硬

  • 动态规划变更问题(有限硬币)。我正在尝试创建一个以以下内容作为输入的程序: 输出: 输出应该是大小为1的数组,其中每个单元格代表我们需要改变单元格索引量的最佳硬币数。 假设数组的单元格位于index: 5,内容为2。这意味着为了给出5(INDEX)的变化,您需要2(单元格的内容)硬币(最佳解决方案)。 基本上,我需要这个视频的第一个数组的输出(C[p])。这与有限硬币的大区别是完全相同的问题。链接

  • 如果遇到硬盘故障,linux mint 会在发生错误时,将系统所在盘符 mount 为 ro 只读,导致重启时无法进入操作系统。 这样开机只能进入内存虚拟的一个命令行界面,此时可以使用 fsck 命令扫描磁盘分区并尝试修复磁盘错误。 执行命令: fsck -a /dev/sda* 如果无法自动修复问题,会要求手工修复,需要执行: fsck /dev/sda* 然后一路确认即可。