問題文は次のとおりですN
。x1
, x2
,..
を見つける必要がありますxp
. N = x1 + x2 + .. + xp
, p は最小 (合計の項の数を意味します) でなければならず、また ( のサブセットの合計から 1 から (N-1) までのすべての数値を取得できなければなりません. x1、x2、x3..xp)。セット内の数字も繰り返される場合があります。
たとえば、N=7 の場合。
7 = 1+2+4
そして6= (2,4)
、、、5= (4,1)
など。4 = (4)
_3=(1,2)
例 2:
8 = 1+2+4+1
例 3:(無効) 8 = 1+2+5 ただし、(1,2,5) のサブセットから 4 を取得することはできません。したがって、(1,2,5) は有効な組み合わせではありません。
私のアプローチは、「N」がp項またはp + 1項のいずれかを持つよりも、「N-1」がp項の合計として記述できる場合です。ただし、そのアプローチでは、合計が「N-1」になり、「p」項を持つすべての可能な組み合わせをチェックする必要があります。これ以外のより良い解決策はありますか?
解決策:
ステップ 1: セット内に "K" 個のエントリが答えとしてあると仮定します。したがって、各エントリが合計に表示されるか表示されないため、これらの数値から 2^K の異なる数の合計を取得できます。また、数値が「N」の場合、「1」から「N」までの合計を計算する必要があります。したがって
、(2^K -1) = N
K=log(N+1)
ステップ 2: ステップ1
の後、回答に「K」個のエントリが含まれている必要があることがわかりますが、実際のこれらのエントリは何ですか? エントリが (a1,a2,a3...ak) であるとします。したがって、数 P は P = a1*b1 + a2*b2 + a3*b3....+ ak*bk と書くことができます。ここで、すべての b[i] = 0 または 1 です。ここで、P は 2 進数 (b1 b2 b3 bk) の 10 進表現として表示されるため、a[i] = 2^(i-1) を取ることができます。