問題: 整数配列 A[]、長さ = n、整数値 TARGET が与えられた場合。その合計が TARGET よりも小さく、その TARGET に最も近いことを満足するサブシーケンス (連続していない可能性があります) を見つけます。
例: A[] = [10, -2, 3, 7]. ターゲット = 14. 答え = {10, 3}
私は Hackerrank チャレンジでこの問題に遭遇しました。多項式時間の解を見つけることができませんでした。最初は、いくつかの動的計画法の問題に非常によく知られているように思えますが、この場合、「次よりも大きくない」および「最も近い」という条件が排除されているように見えます。その解決策。
動的計画法のアプローチに従う私の最初の考えから、i 問題 (i=0->n-1) で、A[i] を含むか含まないすべてのサブシーケンスを評価する必要があります。後者は A[i] を含みます。は S[i-1] として知られているため、最後の要素として A[i] を持つすべてのサブシーケンスに注目してください。
以前に解決した問題 (0->i-1) に頼ることができない場合、必要な合計がターゲットよりも小さく、ターゲットに最も近い必要があるため、小さなソリューションからは得られない可能性があり、2 番目の問題から生成される可能性があります。 、3 番目に最後の要素 A[i] を追加し、A[i] を含むすべてのサブシーケンスを反復するには、単一のセット {A[i]} を除いて、2^i - 1 個のサブセットすべてを通過する必要があります。
この種の問題に関する提案はありますか?