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

