【发布时间】:2018-05-19 05:39:36
【问题描述】:
我们在课程中遇到了这个问题,我与之交谈过的人都没有解决它。我想要一些帮助。那么问题来了:
令 A 为长度为 n 的数组,其中包含 n 位数字(数字在 0-9 之间)。 A的数字子序列是正数的序列,当序列中某个数字的所有数字在A中出现一行时,它们的数字组成A的子序列。 p>
例如:序列13,1,345,89,23是输入数组A的数字子序列: [1,3,5,1,2,3,4, 5,8,9,4,5,2,3]
数字子序列的长度是出现在其中的数字的数量(在上面的示例中:5) 如果序列中的每个数字都大于它之前的数字,则数字子序列递增。
请求是在动态规划方法(基于递归公式)中找到一种算法,该算法找到输入数组 A 的最长递增数字子序列。
提前感谢所有帮助者!
【问题讨论】:
-
我认为这类似于 最长递增子序列 问题,但有一个附加限制,即仅选择所有数字都存在于数组
A中的那些数字。因此,首先,您删除序列13,1,345,89,23, 400中的所有数字,其中至少一个数字不存在于数组A中。在这种情况下,我们将删除400。 (现在任何序列都将形成一个数字子序列)。其次,您只需对剩余数字(13,1,345,89,23)按照通常的最长递增子序列方法来找到最长递增数字子序列。 -
我认为不够清楚:我根本没有任何序列。我得到的只是数组——我需要找到的是输入数组的最大长度的数字递增子序列。我同意这个想法类似于 LIS 问题,但我仍然看不到如何使用它。
-
哦!你没有这么说。所以,我只是假设也提供了序列。
-
因此,最终序列中的所有数字都应具有数组
A中的数字。我对吗?你需要找到最长序列的长度还是序列本身?如果我说91是A的数字,它是否有效?另外,这 (31, 1, 543, 98, 32) 是 A 的有效数字子序列吗? -
我需要找到序列本身。可能有不止一种选择,但重要的是它会以最大长度。 91 不是数字子序列,因为 A 中没有 9 和 1。 (31, 1, 543, 98, 32) 是 A 的有效数字子序列 - 但不会增加......
标签: algorithm recursion dynamic-programming