aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

ABC 018 D バレンタインデー (python)

女子の選びだけ itertool で nCp 通り全列挙して男子の選び方を貪欲に選んでいく。
collection.Counter で most_common(q) とかして選んでいたら TLE したので普通にリストに入れていって上から q 番目まで取ったらいけた。

import sys
input = sys.stdin.readline
n,m,p,q,r = map(int,input().split())
l = [[] for i in range(n)]
for i in range(r):
  A,B,C = map(int,input().split())
  l[A-1].append((B-1,C))

ans = 0
import itertools
for i in itertools.combinations(range(n),p):
  chk = 0
  cnt = [0]*m
  for a in i:
    for b,c in l[a]:
      cnt[b] += c
  cnt.sort()
  chk = sum(cnt[m-q:])
  ans = max(ans,chk)
  
print(ans)