これは、SUBSET−SUMという 問題に対する動的計画法という アルゴリズムの基本的な考え方を応用したもので、 これを知っていればすぐに答がわかります。
SUBSET−SUMとは、 いくつかの数字から成る集合があるときに、それらの数字の和 (重複の使用は許さない)で、ある1つの数字を作ることができるか、 できないか判定する問題です。 例えば、{3、5、6、9} という集合があるとき、17という数はそれらの和で作れるか というと、答えはYESです。
さて、この問題に対する動的計画法は、
まず、3で作ることのできる数の集合をA1
とすれば、
A1={3}
つぎに、3と5で作ることができる数の集合をA2
とすれば、A2は、3で作ることのできるA1と、5自身と、5にA1の
各数を足し合わせた数になるので、
A2={3、5、8}
同様に、3と5と6でできる数の集合をA3とすれば、
3と5の組合せで作れる数字の集合であるA2と、6自身と、6にA2の各数を
足してできる数字からできています。したがって、
A3={3、5、6、8、9、11、14}
そして最後に{3、5、6、9}の集合から作れる
数字の組Aは、
A={3、5、6、8、9、11、12、14、15、17、18、20、23}
となっている。17も確かにこの中に含まれています。
この考え方を利用すれば、クイズの答えは、 {1、2、4}で作れる数字の組は、{1、2、3、4、5、6、7}なので、 8があれば1〜15までの数字がすべて作ることができます。 さらに、16はできなくても構わないので、17があれば16を除いた 1〜32までの数字が全て作ることができるのがわかるでしょう。