使用动态规划背包的硬币找零程序,允许重复

2023-12-21

我编写了下面的代码来实现硬币找零问题:给你 n 种面额的硬币,其值 v(1)

我通过将每个硬币的所有值设置为 -1 来修改背包的重复允许问题。然后,程序应返回最大值,使得所需硬币(面额)的重量加起来等于大小变量(所需找零)。我不知道我哪里出了问题。我应该得到 -2 的答案,这意味着我需要两枚硬币,但我得到的答案是 -1。代码:

#include <stdio.h>
#define max(a,b) (a > b ? a : b)

int matrix[100][100] = {0};

int knapsack(int index, int size, int weights[],int values[]){
    int take,dontTake;

    take = dontTake = 0;

    if (matrix[index][size]!=0)
        return matrix[index][size];

    if (index==0){
        if (weights[0]<=size){
            matrix[index][size] = values[0];
            return values[0];
        }
        else{
            matrix[index][size] = 0;
            return 0;
        }
    }

    if (weights[index]<=size) 
        take = values[index] + knapsack(index, size-weights[index], weights, values); //knapsack(index) and not //knapsack(index-1) 

    dontTake = knapsack(index-1, size, weights, values);

    matrix[index][size] = max (take, dontTake);

    return matrix[index][size];

}

int main(){
    int nItems = 4;
    int knapsackSize = 10;
    int weights[4] = {5,4,6,3};
    int values[4] = {-1,-1,-1,-1};

    printf("Max value = %dn",knapsack(nItems-1,knapsackSize,weights,values));

    return 0;
}

我哪里出错了,我该如何解决这个问题?


很简单,因为,-1 > -2并且您在每个级别的两个选择之间选择最大值。

编辑:我已经实现了一个解决方案,其中值被视为正数,我还对代码进行了微小的更改,如果有什么您不明白的地方,请随时询问。

#include <stdio.h>
#define min(a,b) (a < b ? a : b)
#define INF 10000000

int matrix[100][100] = {0};

int knapsack(int index, int size, int weights[],int values[]){
    int take = INF;

    if (index == -1){
        if(size == 0) return 0;
        else return INF;
    }

    if (matrix[index][size]!=-1)
        return matrix[index][size];

    for(int itemcount = 0;(itemcount * weights[index]) <= size;itemcount++){
        if ((weights[index] * itemcount) <= size) 
            take = min(take, (values[index] * itemcount) + knapsack(index - 1, size - (itemcount * weights[index]), weights, values)); //knapsack(index) and not //knapsack(index-1) 
    }

    matrix[index][size] = take;

    return matrix[index][size];

}

int main(){
    int nItems = 4;
    int knapsackSize = 10;
    int weights[4] = {5,4,6,3};
    int values[4] = {1,1,1,1};
    for(int i = 0;i < 100;i++) for(int j = 0;j < 100;j++) matrix[i][j] = -1;

    printf("Min value = %d\n",knapsack(nItems-1,knapsackSize,weights,values));

    return 0;
}

Ideone 上的解决方案链接:http://ideone.com/TNycZo http://ideone.com/TNycZo

这里我将无穷大视为一个大整数,以找到最小值,如果答案是无穷大,则意味着不可能创建这样的面额。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用动态规划背包的硬币找零程序,允许重复 的相关文章

  • 使用来自本地对象的消息的 std::Exception

    以下代码是否可以安全地抛出带有自定义消息的异常 include
  • HttpResponseMessage 的内容为 JSON

    我有一个 ASP NET MVC WEB API 由于多种原因 由于没有授权而重定向 我不能只使用一个简单的对象并在我的控制器方法中返回它 因此我需要 HttpResponseMessage 类来允许我重定向 目前我正在这样做 var re
  • 如何在C编程中获取当前时间(以毫秒为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 ANSI C 测量以毫秒为单位的时间 https stackoverflow com questions 361363 how to measure time in milliseconds
  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • ZedGraph 缩放和调整大小

    当我绘制图形 放大和缩小并重新绘制图形时 图形的位置不会改变 我想要做的是 每当重新绘制数据时 视图都会更改以查看所有图形数据 如果您在重绘之前放大或缩小 这似乎会被禁用 Thanks 设置属性 IsZoomOnMouseCenter对于控
  • C++17 中带有 noexcept 的 std::function

    在 C 17 中noexcept 已添加到类型系统中 http www open std org jtc1 sc22 wg21 docs papers 2015 p0012r1 html void r1 void f noexcept f
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • 设置外部应用程序焦点

    在 VB NET 中 您可以使用以下命令将焦点设置到外部应用程序 AppActivate Windows Name or AppActivate processID As Integer 现在 如果您这样做 则效果很好 Dim intNot
  • 有哪些 API 可在 Windows 中使用 C# 配置扬声器设置?

    我环顾了很多不同的地方 但似乎找不到一个简单的方法来做到这一点 我在 Windows 7 中有多个声卡 并使用 HDMI 将声音输出到我的 AVR 放大器 我遇到的问题是 当放大器关闭时 它会导致窗口丢失扬声器配置 所以我想做的是编写一个小
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • 在标准库中静态链接时如何支持动态插件?

    假设一个应用程序myapp exe是使用构建的g 它使用标志 static libstdc 这样就可以安装在没有环境的情况下libstdc so myapp exe还添加了对某些功能的插件支持plugf可以通过动态加载dlopen来自共享库
  • DLL 中的 XP 风格组合框

    我需要使用 C 和 WIN32 API 无 MFC 在 DLL 中创建 XP 风格的组合框 我设法在 DLL 中创建控件 不是以 XP 风格 我设法在带有清单的 exe 中创建 XP 样式组合框 但它在 DLL 中不起作用 为了让您的 DL
  • Windows Phone HttpClient PostAsync 挂起且无响应

    我在拨打电话时遇到问题HttpClientWP 应用程序的 post 方法 PostAsync总是挂起并且不给出任何响应 当我从 WPF 应用程序中尝试时 相同的代码可以工作 这是我正在做的事情 服务器Web API代码 public cl
  • 一个对大文件有效的轻量级 XML 解析器?

    我需要解析潜在的巨大 XML 文件 所以我猜这排除了 DOM 解析器 是否有任何优秀的 C 轻量级 SAX 解析器 在占用空间上可与 TinyXML 相媲美 XML的结构非常简单 不需要诸如命名空间和DTD之类的高级东西 只是元素 属性和
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 没有运算符“<<”与这些操作数匹配[重复]

    这个问题在这里已经有答案了 不知道发生了什么事 我查看了与此问题类似的其他帖子 但到目前为止没有解决方案有帮助 这是带有错误部分注释的代码 在某一时刻 它说 不起作用 而在代码的其余部分中 它说 include
  • 通过 OCI 调用 Oracle 存储过程并使用 C++ 中的 out ref 游标返回结果

    我想使用 OCI 接口从 C 调用 Oracle 存储过程 并使用 out SYS REF CURSOR 作为过程的参数来迭代结果 我是 OCI 新手 所以可能会遗漏一些简单的东西 大部分代码取自这里 我的存储过程是 CREATE OR R

随机推荐

  • 如何使用 CSV 文件中的数据运行 XUnit 测试

    有没有办法运行数据驱动XUnit测试使用CSV文件作为数据源 我试过了Cavity Data XUnit 但它不再与最新版本兼容XUnit 到目前为止 我只能使用 Excel 文件来实现这一点 但我需要将它们更改为CSV反而 一个例子 Th
  • Lollipop 上的旋转器出现故障

    我的 Android 项目构建目标是 5 1 1 API 22 这个应用程序似乎适用于除 Lollipop 之外的所有操作系统版本 Lollipop 重新调整了某些活动的高度 否定可滚动布局 并扰乱了旋转器 单击微调器上的特定位置将在应用程
  • 为什么 Tcler 建议支撑你的“表达”?

    我们可以用两种可能的方式评估两个表达式 set a 1 set b 1 puts expr a b puts expr a b 但为什么讨厌经验丰富的 Tclers 第一个 并认为这是不好的做法呢 第一次使用是否expr有一些安全问题吗 问
  • 实体未在数据库中创建表

    我正在使用 Spring boot 并且运行这个模型 package com example demo Models import jakarta persistence Entity Table name user public clas
  • 在 Swift 中将 Float 转换为 Int

    我想转换一个Float to an Int在斯威夫特 像这样的基本转换不起作用 因为这些类型不是基元 不像floats and intObjective C 中的 s var float Float 2 2 var integer Int
  • 如何将 Camel 中的 BeanInspiration 对象转换为消息正文和标头?

    我在用着骆驼代理 http camel apache org using camelproxy html将接口公开为路由的起点 它使用 BeanInitation 对象作为消息正文 如何根据传递给接口的参数设置消息正文和标头 public
  • Bootstrap 响应式按钮组对齐

    在twitter bootstrap 3中 有一个组件准备名称按钮组对齐 URL http getbootstrap com components btn groups justified http getbootstrap com com
  • Django Grappelli 表格内联添加新行 TinyMCE 文本字段不可编辑

    我在我的项目中使用 django Grappelli 皮肤 我有一个带有表格内联函数的 ModelAdmin 我使用 extra 0 来防止加载页面时自动插入空白行 效果很好 现在 当我单击 号插入新行时 该行已加载 但 tinymce 文
  • 更改常量表达式中联合的活动成员

    和谁玩constexpr and union我发现我无法更改某个活动的活跃成员union in constexpr 只有一个例外 union空类 constexpr bool t struct A struct B union U A a
  • 从带有调试器的 EasyMock 的“nice mock”中获取异常

    免责声明 EasyMock 新手 根据文档 和这个帖子 http www jblewitt com blog p 316 1 如果我想使用 EasyMock 生成存根对象 我应该使用EasyMock createNiceMock 漂亮的模拟
  • 如何使用 CMake 为库添加链接器标志?

    当链接二进制文件时我可以使用CMAKE EXE LINKER FLAGS添加一个标志 比方说 Wl as needed 但是 如果我链接一个库 则不会考虑此额外标志 我需要类似的东西CMAKE LIB LINKER FLAGS但我找不到它
  • Flutter 从服务器获取的日语字符解码错误

    我正在使用 Flutter 构建移动应用程序 我需要取一个json来自服务器的文件 其中包含日语文本 退回的一部分json is id egsPu39L5bLhx3m21t1n userId MCetEAeZviyYn5IMYjnp use
  • 使用 Kohana Request 时如何设置 CURL 选项

    尝试使用Request类来获取外部资源 但不知道如何设置更多默认的curl选项 我得到这样的数据 data Request factory url gt execute gt body 我认为添加 CURL 选项很简单 只需复制以下内容即可
  • 如何在 Swift 3 中编写完成处理程序?

    我想知道如何为我在 Swift 3 中创建的函数创建完成处理程序 这就是我在更新到 Swift 3 之前执行函数的方式 func Logout completionHandler success Bool gt backendless us
  • Sequelize 复合唯一约束

    定义模型 export default function sequelize DataTypes return sequelize define Item minor DataTypes INTEGER major DataTypes IN
  • 用于调试的未初始化内存的常见值是什么?

    很久以前 我学会了如何填充未使用 未初始化的内存0xDEADBEEF这样 在调试器或崩溃报告中 如果我看到该值 我就知道我正在查看未初始化的内存 我从 iOS 使用的崩溃报告中看到0xBBADBEEF 人们还使用了哪些其他创造性价值观 任何
  • SimpleXML 枚举区分大小写

    我一直在尝试使用 simplexml 库 v2 6 2 创建 XMLhttp simple sourceforge net home php http simple sourceforge net home php 我想要创建的 XML 必
  • C++、定时器、毫秒

    include
  • 无法在 Xcode 控制台中从 Objective-C 记录 Swift 单例

    我在 Xcode 项目中遇到了控制台问题 我可以在 Swift 中调试 Swift Singleton 但不能在 Xcode 8 和 9 Swift 3 和 4 中调试 Objective C 问题是 为什么在调试 Objective C
  • 使用动态规划背包的硬币找零程序,允许重复

    我编写了下面的代码来实现硬币找零问题 给你 n 种面额的硬币 其值 v 1 我通过将每个硬币的所有值设置为 1 来修改背包的重复允许问题 然后 程序应返回最大值 使得所需硬币 面额 的重量加起来等于大小变量 所需找零 我不知道我哪里出了问题