部分和問題
深さ優先探索では、一番はじめの状態から遷移を繰り返すことで 全ての状態 を生成します。
したがって、すべての状態に対して操作 を施したり、全状態を列挙 することが可能です。
[問題]
整数が n個 与えられます。 その中からいくつか選び、その和をちょうど k にすることができるか判定してください。
[条件]
・整数の個数 n は、1以上20以下 ・各整数の値は、-100000000以上100000000以下 ・目標とする数値(部分和) k は、-100000000以上100000000以下
[解き方]
各整数を1つ目から順番に加えるかどうかを決めていき、n個すべてについて決め終わったら、その和が k に等しいかどうかを判定します。
再帰関数を使用します。
[Google Colaboratory]
1 | # ------------ 入力例1 ---------- |
[実行結果(入力例1)]
Yes
2 + 4 + 7 を足し合わせると 13 になるので Yes が解となります。
[実行結果(入力例2)]
No
どんな組み合わせを行っても 15 となることはないので No が解となります。