(id:asi1024による)JOI本選予想問題:問題1 本棚 (Book Shelf)

解法

まあ、パッと見貪欲で終了って言ってもいいけど、詳しく解説してみる。簡単なDPから貪欲にする方針で。

dp[i] := 本棚 i..M を修理するのにかかる最低時間

とすると求める答は dp[1] で、このDPは次のように計算できる。

dp[i] <- infinity
j <- i
while 棚 i..j を1度に修理することが可能である:
    dp[i] <- min(dp[i], dp[j] + 1)
    j <- j+1

最初は dp[M] <- 1 としておけばいい。

ここで dp は明らかに単調減少だから、1度に修理する棚をできるだけ多くすればいいので、貪欲法で最適解が出せる。

他の考え方(といってもほぼ同じだけど)としては、本棚 1..M を修理する最適解は 1..M をいくつかの範囲に分割したもので表せることから考える。

その最適な範囲の集合の中には必ず 1 を含む範囲があるので、それを出来るだけ広げても集合の要素数が変わらないことから貪欲法で最適解が得られることが示せる。

と、書いてみたけどまあ「パッと見貪欲法」で十分な気がする。

ソース

続きを読む

(id:asi1024による)JOI本選予想問題:問題2 迷子(A Stray Child)

解法

幼女から母親までの距離 >= 幼女から一番近いハンターまでの距離 のとき

幼女に一番近いハンターが先に幼女へ辿りつけるので無理

幼女から母親までの距離 < 幼女から一番近いハンターまでの距離 のとき

母親が幼女への最短経路を行ければ一番よい。

またこのとき、ハンターは母親が幼女への最短経路を行くのを妨げることができない。なぜなら、経路を妨げるには母親よりも先回りして経路に乗っておく必要があるが、もしそれが出来たとすると条件に矛盾するため。

よって

幅優先探索するだけでよい。

ソース

続きを読む