競プロ典型90問: 032 - AtCoder Ekiden(★3)
https://gyazo.com/a36bb6ed920265bdaa63403bd8ad67ea
【32 日目】
昨日の解説と今日の典型問題です。制約が N ≦ 10 と非常に小さいです!
hr.icon
https://gyazo.com/a6e5e9509eee85c82d25ce9fc3b0f971
【33 日目】
$ \mathcal{O}(N! \times N)
code:py
inf = 10**9
n = int(input())
m = int(input())
ng = [False*n for _ in range(n)] for _ in range(m):
x, y = map(int, input().split())
# dplastfinished: 走り終わった人のbit表現がfinished、最後に走った人がlastのとき、かかる時間の最小値 # lastのほうが値域が小さいので先にもってきている
dp = [inf*(1 << n) for _ in range(n)] # 初期化(各人が1区を走ったとき)
for last in range(n):
# dp更新用関数
def chmin(last, finished, time):
for finished in range(1 << n):
interval = bin(finished).count("1") # 次の走者が何区か
for last in range(n):
if dp_prev == inf:
# lastがfinishedに含まれていない場合?
continue
for current in range(n):
if finished >> current & 1:
# すでに走っている
continue
# NGペア
continue
ans = min(dpx-1 for x in range(n)) if ans == inf:
ans = -1
print(ans)