https://www.acmicpc.net/problem/16457
kn, qn, qsn = [int(x) for x in input().split()]
qs = []
for i in range(qn):
s = set([int(x) for x in input().split()])
qs.append(s)
def clear_num(s):
num = 0
for a in qs:
if a <= s:
num+=1
return num
max_clear = 0
def step(s, i, sl):
global max_clear, kn
if i > 2 * kn:
return
step(s, i+1, sl)
new_s = s.copy()
new_s.add(i)
sl += 1
if sl == kn:
clear = clear_num(new_s)
max_clear = max(max_clear, clear)
# print(f"{new_s} - {max_clear}")
return
step(new_s, i+1, sl)
s = set()
step(s, 1, 0)
print(max_clear)
from itertools import combinations
kn, qn, qsn = [int(x) for x in input().split()]
qs = []
for i in range(qn):
s = set([int(x) for x in input().split()])
qs.append(s)
def clear_num(s):
num = 0
for a in qs:
if a <= s:
num+=1
return num
comb = list(combinations(list(range(1,2*kn+1)), kn))
max_clear = 0
for a in comb:
clear = clear_num(set(a))
max_clear = max(max_clear, clear)
print(max_clear)
kn, qn, qsn = [int(x) for x in input().split()]
qs = []
for i in range(qn):
s = [int(x) for x in input().split()]
b = 0
for a in s:
b |= (1 << a)
qs.append(b)
def clear_num(s):
num = 0
for a in qs:
if s & a == a:
num+=1
return num
max_clear = 0
def step(s, i, sl):
global max_clear, kn
if i > 2 * kn:
return
step(s, i+1, sl)
s |= (1 << i)
sl += 1
if sl == kn:
clear = clear_num(s)
max_clear = max(max_clear, clear)
return
step(s, i+1, sl)
s = 0
step(s, 1, 0)
print(max_clear)
역순 : 비트마스크 사용 시 시간 가장 많이 단축