ダイヤモンド
当HPがいつもお世話になっているHN「YI」さんからの出題です。
(平成26年4月12日付け)
画像を見て答えてください。
1.左の「1」からスタートする。分かれ道にさしかかったら好きな方向に向かう。ただし、左に
戻らず、右に右にと進んでいく。いちばん右に到着したときに、通った数字の合計が最も大
きくなるような進み方を答えよ。
2.このような問題について、どのようなネットワークでも答えを導ける一般的な方法を考えよ。
この問題は中学二年生のときに作りました。同級生は誰も相手にしてくれなかったのを覚え
ています。
(答) らすかるさんが考察されました。(平成26年4月12日付け)
1→12→13→14→27→21→20 だと思います。
DD++さんが考察されました。(平成26年4月13日付け)
1.の解は、らすかるさんの解と同様に、「1、12、13、14、27、21、20」で、合計108 が最大。
2.について、右から順に以下の作業をする
・一番右の列の各マスはそのままにしておく。(今回は、20をそのままに)
・右から二番目の列の各マスについて、その右に繋がっている数のうち最大のものを
加えて書き換える(今回は上からそれぞれ41、39、37に書き換える)
・右から三番目の列の各マスについて、その右に繋がっている数のうち最大のものを
加えて書き変える(今回は上からそれぞれ61、67、50、68、52に書き換える)
・左端まで繰り返す(今回は108になり、これが合計の最大値)
・左端からスタートし、右に繋がっているうち最大の数が書いてあるところを選んで進む
・数字を全部戻してその経路を通るのが答え
(コメント) なるほど、DD++さんの逆算の方法が自然な計算ですね。
私の備忘録の「スケジュール問題」による解法と同じ考え方です。
YI さんからのコメントです。(平成26年4月13日付け)
DD++さんの解法はわかりやすいですね。私が考えていたのは、もっと分かりにくい考え方
でした。
・任意の点Aから点Bへ向かう道筋をルートと呼ぶ。
・ある2つのルートについて一方を通るともう一方を通ることができない場合、二つのルート
は独立であるとする。
1.適切な2点A、Bを考え、AからBへ向かう最も点数の高いルートを探す。それが判定でき
なければ、別の2点を選びなおす。
2.AからBに向かうルートに接しているルート、つまりルートA、Bから「開いている」ルートを
すべて探す。
3.2で選んだすべてのルートに対して独立、かつ、1.で見つけたルートに含まれていない、
ルートA、Bの部分をすべて消去する。
4.これを繰り返すと、答えのルートだけが残る。
(具体例)で説明すると、
1.画像の左側の1と8を選択。1から8に向かうルートは上側のほうが点数が高い。
2.A,Bから開いているルートは、15-12と10-15
3.1-10は1のルートに含まれていないが、10-15と独立でないので、残しておく。10-8
は、条件に合うので、消去する。