Russian Dolls マトリョーシカの性質上、DAG になる。動的計画法を使って解けた。 dp[i] := i個のマトリョーシカを使ってでできる最大のマトリョーシカ while line = gets n = line.chomp.to_i break if n == 0 dolls = [] n.times do dolls << gets.chomp.split.map(&:to_i) end m = gets.chomp.to_i m.times do dolls << gets.chomp.split.map(&:to_i) end dolls.sort! do |a, b| if a[0] == b[0] a[1] <=> b[1] else a[0] <=> b[0] end end dp = Array.new(dolls.size + 1, 0) for i in 1..dolls.size for j in 1..i if i - j == 0 || (dolls[i - 1][0] > dolls[i - j - 1][0] && dolls[i - 1][1] > dolls[i - j - 1][1]) dp[i] = [dp[i], dp[i - j] + 1].max end end end puts dp.maxend