N = gets.to_i $chemistory = [] N.times.each{|y| gets.split.take(N).map(&:to_i).each_with_index{|v, x| $chemistory[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])