ある遺言執行 - 組み合わせの生成

私が関与した遺言の執行で、こういうケースがありました。

「原則として、現預金のすべては妻に残すが、土地 X の相続税評価額に最も近い 預金の組み合わせだけは子供の B に与えるものとする」

実際にはもっとややこしいのですが、整理するとこういうことになります。そして、 この問題に関係した遺産を整理すると、下記のようになりました。

  1) 土地 X の相続税評価額 = 12,789,161 円
  2) 20 口の預金の明細 (円) = {
	1113, 1115, 29317, 62769, 146199, 353580, 509388, 753068, 835873,
	1000332, 1001000, 2002272, 2128091, 2443146, 2598946, 2684358,
	3016609, 3489469, 3851663, 8100937 };
つまり、20 の預金通帳から、合計が 12,789,161 円に最も近い組み合わせを 見付ければ良いのですが、たった 20 の預金と言っても、

  組み合わせの数は 2^20 = 1,028,576
もあるわけで、「何も選ばない組み合わせ」といったものを捨てる作業はともかく、 まともに人手でやる気になりません。

というわけで、コンピュータに助けてもらうのが自然ですが、どうしたら良いで しょうか。

私の場合はアルゴリズムの選択とプログラムの作成に 15 分。計算に 1 秒弱という 結果で、以下、実際にやった結果を付けておきますが、せっかくのチャンスですから、 答えを見る前に考えてください。

解法例を見られる場合も、手早く答えを出さねばならないという仕事の結果ですから、 模範回答は期待しないでください。細部のチェックもしていません。

解法例

平林浩一, 1999-07-25