$n = gets.to_i - 1 $v = gets.split.map(&:to_i) def dfs(n, memo) return $v[0] if n==0 return $v[1] if n==1 (n-2).downto(0) do |i| tmp = memo[i] < 0 ? dfs(i, memo) : memo[i] memo[n] = tmp if tmp > memo[n] end return memo[n] + $v[n] end puts dfs($n, Array.new($n+1, -1))