使用动态规划进行硬币找零

2023-12-19

我一直在使用动态规划来解决硬币找零问题。我尝试创建一个数组 fin[],其中包含该索引所需的最小硬币数量,然后打印它。 我编写了一段代码,我认为应该给出正确的输出,但我不明白为什么它没有给出准确的答案。 例如:对于输入:4 3 1 2 3(4是要找的金额,3是可用硬币的种类数量,1 2 3是硬币价值列表)输出应该是: 0 1 1 1 2 (因为我们有 1,2,3 可用硬币,所以需要 0 个硬币来兑换 0,1 个硬币来兑换 1,1 个硬币来兑换 2,1 个硬币来兑换 3 和 2兑换硬币 4) 但它给出 0 1 2 2 2

这是代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in= new Scanner(System.in);
        int ch = in.nextInt();
        int noc = in.nextInt();
        int[] ca = new int[noc];
        for(int i=0;i<noc;i++)
            {
                //taking input for coins available say a,b,c
            ca[i] = in.nextInt();
        }

       int[] fin = new int[ch+1]; //creating an array for 0 to change                                store the minimum number of coins required for each term at index

        int b=ch+1;
        for(int i=0;i<b;i++)
            {
            int count = i; //This initializes the min coins to that number so it is never greater than that number itself. (but I have a doubt here: what if we don't have 1 in coins available 

            for(int j=0; j<noc; j++)
                {
                int c = ca[j]; //this takes the value of coins available from starting everytime i changes

                if((c < i) && (fin[i-c] +1 < count)) // as we using dynamic programming it starts from base case, so the best value for each number i is stored in fin[] , when we check for number i+1, it checks best case for the previous numbers.
                    count = fin[i-c]+1 ;

            }
            fin[i]= count;
        }


        for(int i=0;i<b;i++)
            {
            System.out.println(fin[i]);
        }

    }
}

我从这个页面引用了:http://interactivepython.org/runestone/static/pythonds/Recursion/DynamicProgramming.html http://interactivepython.org/runestone/static/pythonds/Recursion/DynamicProgramming.html

有人可以帮忙吗?


The article http://interactivepython.org/runestone/static/pythonds/Recursion/DynamicProgramming.html您引用的,很好地解释了如何使用动态编程构建硬币兑换器算法。该算法的Python版本可以翻译成Java:

import java.util.Arrays;
import java.util.List;

public class CoinChanger {

    public int[] dpMakeChange(List<Integer> coinValueList, int change, int[] minCoins) {
        for (int cents = 0; cents <= change; cents++) {
            int coinCount = cents;
            for (Integer c : coinValueList) {
                if (c > cents) {
                    continue;
                }
                if (minCoins[cents - c] + 1 < coinCount) {
                    coinCount = minCoins[cents - c] + 1;
                }
            }
            minCoins[cents] = coinCount;
        }
        return minCoins;
    }

    public static void main(String[] args) {
        List<Integer> coinValueList = Arrays.asList(new Integer[]{1, 2, 3});
        int change = 10;
        int[] minCoins = new int[change + 1];
        int[] result = (new CoinChanger()).dpMakeChange(coinValueList, change, minCoins);
        for (int i = 0; i < result.length; i++) {
            System.out.println("For change = " + i + " number of coins = " + result[i]);
        }
    }
}

正如您的问题一样,使用价值 1、2 和 3 的硬币,之前的算法会为您提供正确的值:

For change = 0 number of coins = 0
For change = 1 number of coins = 1
For change = 2 number of coins = 1
For change = 3 number of coins = 1
For change = 4 number of coins = 2
For change = 5 number of coins = 2
For change = 6 number of coins = 2
For change = 7 number of coins = 3
For change = 8 number of coins = 3
For change = 9 number of coins = 3
For change = 10 number of coins = 4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用动态规划进行硬币找零 的相关文章

  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 为什么 java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

    为什么下面的代码没有报告 Intellij IDEA 的未经检查的警告jdk 1 8 0 121自从Supplier
  • eclipse中导入项目文件夹图标

    我在 Eclipse 工作区中新导入的 Maven 项目有J and M项目文件夹顶部的图标 项目和包资源管理器 而其他导入的 Maven 项目只有一个J icon 有人可以解释其中的区别吗 该项目有J装饰器被称为 Java 项目和具有M装
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 在 HTTP 标头中发送 UTF-8 值会导致 Mojibake

    我想使用 servlet 发送阿拉伯语数据HTTPServletResponse给客户 我正在尝试这个 response setCharacterEncoding UTF 8 response setHeader Info arabicWo
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop

随机推荐

  • 分析中的安全点和安全点轮询是什么?

    我面临的情况是看不到某些方法调用not被记录在VisualVM应用 想找出原因并遇到这个回答SO https stackoverflow com a 14025723 1527084 第三点提到了一个潜在的问题sampling方法 这是我看
  • MySQL 是否有相当于 PostgreSQL array_to_string 的工具

    我正在尝试找到与 PostgreSQL 函数等效的 MySQLarray and 数组到字符串并遇到了这个帖子 https stackoverflow com questions 4326868 equivalent to postgres
  • sed 中的贪婪

    I want ereg rat dog cat 成为 preg match rat dog cat 为了实现这一目标 我做了 echo ereg rat dog cat sed s ereg preg match 1 2 g 但是 这个正则
  • AWS Lambda S3 GET/POST - SignatureDoesNotMatch 错误

    我的 Lambda node js 函数已经启动并运行了大约 6 个月 没有出现任何问题 该函数只是获取一个对象并将其从一个存储桶复制到另一个存储桶 今天 我开始得到 SignatureDoesNotMatch 我们计算的请求签名不匹配 与
  • sed 仅删除第一个模式匹配

    我想匹配两个模式之间的一组数据并删除该数据和开始 结束模式 但仅限于模式的第一次出现 所以如果这是测试数据 PATTERNSTART LINE1 LINE2 LINE3 PATTERNEND PATTERNSTART LINE1 LINE2
  • Python:如何从加拿大的 shapefile 创建分区统计图?

    我的目标是创建一个等值线地图 https en wikipedia org wiki Choropleth map加拿大的Python 假设我有一本字典 其中的值涉及加拿大每个省 地区 myvalues Alberta 1 0 Britis
  • ios 10+、Swift 3+ - 无法从 Singleton 实例中消除 UIAlertController

    我创建了一个覆盖层 以便在对服务器运行异步数据抓取时运行 以便用户在数据抓取完成之前不会继续按 UI 中的按钮 我已将该函数放入全局单例类中 并在传递布尔值时调用它来表示是否要显示或隐藏 我可以让它显示 但我无法让它隐藏 这是代码 clas
  • Solr 使用 copyField 突出显示

    我有一个 solr 实例 在索引时我在文本正文上使用 copyField 将其通过两个不同的分析器 我想突出显示这两个字段 因此我将这两个字段设置为stored true 这使得索引的文本存储变得臃肿 我认为这些数据是重复的 So 1 有没
  • DatePickerDialog 主题为 Holo Light?

    如何获得具有 Holo Light 主题的 DatePickerDialog 当创建一个DatePickerDialog如下 DatePickerDialog dpd new DatePickerDialog new ContextThem
  • 使用 jQuery 检查特定类的所有输入是否为空

    我正在尝试检查某个类的所有输入字段是否为空 现在我有以下代码 HTML
  • 如何设置 BLE 通告数据包的设备名称字段

    我使用 API 来构建广告数据包 我通过true to setIncludeDeviceName AdvertiseData data new AdvertiseData Builder setIncludeDeviceName true
  • 在php中模糊搜索数组

    在我搜索之后 我发现了如何对a进行模糊搜索string 但我有一个字符串数组 search a gt laptop b gt screen 我从 MySQL 数据库中检索到的 是否有任何 php 类或函数可以对单词数组进行模糊搜索 或者至少
  • Json 日期到 Java 日期并返回 Json 日期

    我在这里查看了所有可能的答案 但我很难弄清楚这件事 我在字符串中有 Json 日期 我想在不损失时间的情况下转换为 Java 日期 我还想从 Java Date 转换为 Json Date 字符串 这是我所拥有的 String jsonDa
  • 如何从图中获取顶点 ID

    请考虑以下事项 library igraph id lt c 1 2 A B name lt c 02 653245 03 4542342 Peter Mary category lt c digit digit char char fro
  • Scala 中有双向映射之类的东西吗?

    我想链接 2 列唯一标识符 并且能够通过第二列值获取第一列值以及通过第一列值获取第二列值 就像是 Map 1 lt gt one 2 lt gt two 3 lt gt three Scala中有这样的设施吗 实际上我需要更多 3 列 用于
  • 添加滚动视图会使应用程序崩溃

    我的任务是为情人节创建一个应用程序 我正在制作一个情书生成器 我只能使用一项活动 因此我创建了一个文本视图 将可见性设置为消失 这封情书有点长 所以我想要滚动视图 添加该内容会使应用程序崩溃 请帮忙
  • javascript中对象串联的问题

    我在连接java脚本中的对象时遇到问题 例如 var firstObj firstObj info sam kam var secObj secObj info ram dam 我需要的输出 firstObj info sam kam ra
  • ValueError:Python 中 float() 的文字无效

    To all 我很好奇是否有人可以帮助我理解错误 ValueError float 的无效文字 当我将文本文件传递到列表然后尝试将此列表转换为浮点值时 我得到了这个信息 a open input txt r lines a readline
  • 使用react-chartjs-2显示每个切片的饼图数据值

    我正在制作一个饼图 并且正在努力显示每个切片的饼图数据值 由于我的应用程序是用 React js 编写的 因此我使用react chartjs 2 我找到了这个针对chart js的解决方案并尝试实现 但它不适用于react chartjs
  • 使用动态规划进行硬币找零

    我一直在使用动态规划来解决硬币找零问题 我尝试创建一个数组 fin 其中包含该索引所需的最小硬币数量 然后打印它 我编写了一段代码 我认为应该给出正确的输出 但我不明白为什么它没有给出准确的答案 例如 对于输入 4 3 1 2 3 4是要找