サイズ n の (負でない) 整数配列で、サイズ k の最大積の昇順サブシーケンスを見つける方法。良い解決策が見つかりませんでした。サブシーケンスは連続している必要はありません。例: サイズ 3 の 10,1,3,9,7,8,5 で 3,7,8。
質問する
645 次
2 に答える
1
以前に見た問題に還元してみてください。
- サブシーケンスの最大長増加問題を解きます。
- 最大合計増加サブシーケンス問題を解きます。
- 積を合計に変換する方法を考えてみてください。(ヒント: 対数、なぜ?)
- 最大積増加部分列問題を解きます。
于 2013-04-11T00:29:54.620 に答える
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]
于 2013-04-11T00:30:34.137 に答える