Description:
島1, ..., 島nとあり、その間に橋がいくつか架かっている。(n<=13)
この島を一度ずつ訪れるパスを考える(ハミルトンパス)。
島iにはスコアViが振られており、このハミルトンパスのスコアを次のように計算するものとする。
1. 島iを訪れると、Viがパスのスコアに加算される。
2. 島i, 島jと移動すると、Vi * Vj がパスのスコアに加算される。
3. 島i, 島j, 島kと移動した時、もし島iと島kの間に橋が存在するなら、Vi * Vj * Vkがパスのスコアに加算される。
パスのスコアは最大でいくつになるか? また、そのスコアを達成するパスは何通り存在するか?
もしパスが存在しないなら、0 0を出力せよ。
Answer:
すでに訪れた島の情報 * 一番最後に訪れた島の番号 * 最後から2番目に訪れた島の番号 の上でDPを行えばよい。
計算時間は、 状態数*枝の数なので、O(2^N * N^3)。
島が1つしかない場合がありえるので、それだけ注意。
Source: