こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
最安値を達成するには 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のポイントですね。
(そこが難しい…)
ということで今回はこれで👍