(備忘録)問題解決のための「アルゴリズム数学」〜 6
問題
自分の回答
Rangeの(0...N)の部分を最初(0..N)としていたので最後のN部分(nil)が含まれていることが分からず沼りました。 また書籍見ながらなので回答の出し方はなんとなく分かるのですが、この辺りは今後自分で考えながら出せるようになりたいですね。
N = gets.to_i h = gets.split.map(&:to_i) dp = Array.new(N) (0...N).each do |i| if i == 0 dp[0] = 0 elsif i == 1 dp[1] = (h[1] - h[0]).abs else v1 = dp[i-1] + (h[i] - h[i-1]).abs v2 = dp[i-2] + (h[i] - h[i-2]).abs dp[i] = [v1, v2].min end end puts dp[N-1]