【发布时间】:2017-07-21 20:40:17
【问题描述】:
我最近在一次采访中被问到这个问题,
给定一个非负整数数组,找出 可以得到的最大累积总和,使得所有的长度 参与子数组是一个素数。我尝试使用动态编程提出解决方案,但不幸的是无法解决。
例如:如果数组是 [9,8,7,6,5,4,3,1,2,2] 它应该返回 46 (子数组的总和 [ 9,8,7,6,5,4,3] 长度为 7 和 [2,2] 长度为 2)。您不能将 [9,8,7,6,5,4,3] 和 [1,2,2] 组合起来,因为它会产生一个长度为 10 且非素数的连续子数组(幂等性)。
谁能解释如何使用 DP 解决这些问题?谢谢。
【问题讨论】:
-
为什么不是 15? [8,4,3] - 长度是质数 (3)。你没有说所有元素都应该是素数。
-
为什么要使用动态规划?很简单,就是先找到最大的素数(从列表的长度倒推),然后是那个特定长度的最大子数组,这是一个很常见的问题。
-
@user 它应该包含连续的元素。抱歉忘记提了。修好了!
-
@ChatterOne 你能提供一个伪代码吗?我想我没听懂你说的。
-
对于一个大型数组,我认为您希望在遍历求和之前将其扫入segment tree。
标签: algorithm dynamic-programming