最大乘积上升子序列

时间:2013-04-11 00:17:48

标签: arrays algorithm integer

如何在大小为n的(非负)整数数组中找到大小为k的最大乘积上升子序列。我没有找到任何好的解决方案。子序列不需要是连续的。例如:10,1,3,9,7,8,5中的3,7,8,大小为3.

2 个答案:

答案 0 :(得分:1)

尝试减少您之前见过的问题。

  1. 解决最大长度增加后续问题。
  2. 解决最大增加后续问题。
  3. 考虑如何将产品转换为总和。 (提示:对数,为什么?)
  4. 解决最大产品增加后续问题。

答案 1 :(得分:1)

在Haskell中,你可以这样做,虽然对于大n来说可能不是很快:

import Data.List (maximumBy, sort, subsequences)

maxSubProduct k = 
  maximumBy (\a b -> compare (foldr (*) 1 a) (foldr (*) 1 b)) 
  . filter (\x -> x == sort x) 
  . filter ((==k) . length) 
  . subsequences


OUTPUT:
*Main> maxSubProduct 3 [10,1,3,9,7,8,5]
[3,7,8]