- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有 n 个邮票,其中每个邮票 i 都有特定的面额 d(i) 和大小 s(i)。所有面额都是不同的,我们可以多次使用邮票面额。现在我想设计一个算法,给定邮票的 d(i) 和 s(i) 以及邮资数额 p,找到最小的邮票总尺寸,其面额将恰好加到 p?
我知道这是一个动态规划问题,而且我觉得它应该像背包问题一样被解决。但我完全糊涂了,因为这里邮票的最小总大小应该加起来是 p。我想出了以下循环,我知道这不会是真的,因为它不检查总最小大小是否等于 p:
M(p)=min{M(p-d(i))}+s(i),M(p-d(i))} for i from 1 to n
我也不知道如何制表(以便编写动态程序的迭代版本)。
我的猜测是,我必须有一个维度为 p 和 d(i) 的二维数组,并且每个单元格都用 s(i) 填充。
最佳答案
你猜对了。这是二维DP问题。但在我们声明我们需要得出一个递归公式之前,我们将看到有多少字段在该公式中发生变化。
在您的问题陈述中有两件事:1) 邮票大小需要最小化。 2)所有邮票加起来应该是总和 P。如果你是初学者,不要认为 DP 直接从底向上。首先考虑自上而下的递归方法,经过一些练习应该会变得容易思考。在这种情况下,假设您知道 N 个邮票的解决方案。让我们将这个解决方案表示为 M(d(N), P),它表示 M 是 N 个邮票中总和为 P 的解决方案。为了获得递归关系,想想如果最后一个邮票 (Nth) 不是结果的一部分会怎样问题将简化为从 N-1 个邮票中找出 P 个。如果存在最后一个元素(第 N 个标记),问题是从 N-1 个标记中找到 P - d(N) 个总和。其循环关系如下所示:
M(N, P) = Min{ M(N-1, P), M(N-1, P - d(N))}
或更一般意义上的:
M(i, P) = Min{ M(i - 1, P), M(i - 1, P - d(i))}
如您所见,此递归公式中有两个字段在变化,因此您必须考虑二维 DP。
取两个轴,在 X 轴上取 0 到 P 所有总和,在 y 轴上取数字 0 到 N(元素数)。迭代函数应如下所示。
set all M(0, j) and M(i, 0) = 0 for all i [0, N] and j [0, P]
for: i = 0 to N
for: j = 0 to P
for: int k = 0 to j
if: j - P(k) >= 0 and M(i, j) < M(i-1, j-P(k))
M(i, j) = M(i-1, j-P(k));
return M(N, P);
注意:我没有提到图章的大小,因为很明显 M 中的字段将是那些需要最小化的选定图章的大小。
关于algorithm - 如何设计以下动态规划算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22703478/
我正在创建我的第一个 WAR 文件。我一直在试验 ant buildfile 语法,我的 buildfile 的第一部分从我的 Eclipse 项目中获取内容并将其放入 /dist 文件夹中,然后将其
我是一名学习 SQL 和 PHP 的学生,我接到了一项任务,要使用 PHP 和 mySQLi 创建学生反馈表,我真的一直在思考如何为项目设计数据库! 我正在创建一个系统,用户可以在其中登录网页,如果用
这个问题在这里已经有了答案: Is it possbile to test for expected errors when the testee exits with failure using
我目前正在设计和开发一个 Web 应用程序,该应用程序有可能快速增长。我将提供一些一般信息,然后继续我的问题。我会说我是一名中级网络程序员。 以下是一些规范:MySQL - 数据库后端PHP - 用于
我不知何故无法在我的日志解析器应用程序中实现报告功能。 这是我目前所做的: 我正在编写一个应用程序,它读取日志文件并在字符串中搜索可以在用户配置文件中定义的多个正则表达式。对于从配置中解析的每个所谓的
我有兴趣学习如何在多开发团队场景中设计/规划 Web 应用程序开发。 假设“项目经理/负责人”的角色: 成功的 Web 应用程序开发需要哪些“文档”? 需要什么 UML 图,需要什么程度? 在设计/计
table a (t_a): id name last first email state country 0 sklass klass steve
我们建立了一个广泛使用 JQuery UI 的 AJAX 网站。我们有 30 多个自制的 JQuery UI 小部件(动态加载)。我们到处都使用 JQuery native 小部件:对话框、 slid
我是一名优秀的程序员,十分优秀!