```ver1 def max_sub_array(nums) max = nums[0] (1...nums.size).each do |i| nums[i] = [nums[i - 1] + nums[i], nums[i]].max max = [max, nums[i]].max end max end ``` ```ver2 def max_sub_array(nums) dp = [nums[0]] (1...nums.size).each do |i| dp[i] = [dp[i - 1] + nums[i], nums[i]].max end dp.max end ``` # i | nums # - | [1] # i | nums # - | [ 5, 4,-1, 7, 8] # 1 | [ 5, 9,-1, 7, 8] # 2 | [ 5, 9, 8, 7, 8] # 3 | [ 5, 9, 8,15, 8] # 4 | [ 5, 9, 8,15,23] # i | nums # - | [-2, 1,-3, 4,-1, 2, 1,-5, 4] # 1 | [-2, 1,-3, 4,-1, 2, 1,-5, 4] # 2 | [-2, 1,-2, 4,-1, 2, 1,-5, 4] # 3 | [-2, 1,-2, 4,-1, 2, 1,-5, 4] # 4 | [-2, 1,-2, 4, 3, 2, 1,-5, 4] # 5 | [-2, 1,-2, 4, 3, 5, 1,-5, 4] # 6 | [-2, 1,-2, 4, 3, 5, 6,-5, 4] # 7 | [-2, 1,-2, 4, 3, 5, 6, 1, 4] # 8 | [-2, 1,-2, 4, 3, 5, 6, 1, 5] Travelling ```ruby= n = gets.to_i t = x = y = 0 ta = [] xa = [] ya = [] n.times do ti, xi, yi = gets.split.map(&:to_i) ta << ti xa << xi ya << yi end n.times do |i| dest = (xa[i] - x).abs + (ya[i] - y).abs room = ta[i] - t if dest % 2 != room % 2 || dest > room puts 'No' exit end t = ta[i] x = xa[i] y = ya[i] end puts 'Yes' ```