paizaの練習問題を解く 【最安値】最安値を達成するには 4 Go編
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 【最安値】最安値を達成するには 4 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 実装 以下のように実装しました。 package main import "fmt" func main(){ var n, x, a, y, b, z, c int fmt.Scan(&n, &x, &a, &y, &b, &z, &c) dp := make([]int, n + z) min := func(a, b int) int { if a < b { return a } else { return b } } for i := 1; i < n + z; i++ { dp[i] = 1000000 } for i := 0; i < n + z; i++ { if i >= x { dp[i] = min(dp[i], dp[i - x] + a) } if i >= y { dp[i] = min(dp[i], dp[i - y] + b) } if i >= z { dp[i] = min(dp[i], dp[i - z] + c) } } for i := n + z- 2; i > 0; i-- { dp[i] = min(dp[i], dp[i + 1]) } fmt.Println(dp[n]) } ただまだなぜこれで動くのかをちゃんと理解できていないので、繰り返しで学習しようと思います。 ...