重みの固定リストがあります:
int[] weights = new int[] { 10, 15, 20 };
およびターゲット:
int target = 28;
私は、 (繰り返しが許可されている)target
からの要素の合計として表現するアルゴリズムを探しています。これは、一致または超過し、可能な限り最も近い一致が達成され、その中で使用される重みの数が最小限に抑えられます。weights
target
target
したがって、上記の入力では、10 20
または15 15
を返す必要があります。これ30
は、可能な限り近いためであり、作成のオプションの30
うち、これら2つは。よりも優れてい10 10 10
ます。
のを使用するtarget
と39
、出力は、、、または20 20
ではなく、になります。15 15 10
10 10 10 10
のを使用するtarget
と14
、出力はになります15
。
通常のforeachループ以外に、ここで良いアプローチはありますか?配列で使用可能な最大値を取得して、ターゲットが負であるかどうかを確認することを考えていました。負でない場合は、次の値に進みましょう。
これは宿題ではありません:)