こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

最安値を達成するには 1 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

議事コードをGoで書き起こしたのが以下の通りです。

package main
import "fmt"
func main(){
    var n, a, b int
    fmt.Scan(&n, &a, &b)
    min := func(a, b int) int {
        if a < b {
            return a
        } else {
            return b
        }
    }
    dp := make([]int, n + 1)
    dp[1] = a
    for i := 2; i <= n; i++ {
        dp[i] = min(dp[i - 1] + a, dp[i - 2] + b)
    }
    fmt.Println(dp[n])
}

これで解決しました。

部分式に書き起こすというのがDPのポイントですね。

(そこが難しい…)

ということで今回はこれで👍