N = gets.to_i $chemistory = {} N.times.each{|y| gets.split.take(N).map(&:to_i).each_with_index{|v, x| $chemistory[[x,y]] = v } } $dp={} def g(unused) $dp[unused] ||= if unused.empty? 0 else a = unused.first (unused - [a]).inject(0){|r,b| [r, $chemistory[[a,b]] + g(unused - [a, b])].max } end end p g([*0...N])