結果
問題 |
No.943 取り調べ
|
ユーザー |
![]() |
提出日時 | 2025-03-20 06:31:36 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 394 ms / 1,206 ms |
コード長 | 717 bytes |
コンパイル時間 | 471 ms |
コンパイル使用メモリ | 82,276 KB |
実行使用メモリ | 76,776 KB |
最終ジャッジ日時 | 2025-03-20 06:31:40 |
合計ジャッジ時間 | 3,735 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 24 |
ソースコード
INF = 1 << 60 N = int(input()) X = [] for _ in range(N): xs = list(map(int, input().split())) b = 0 for j in range(N): if xs[j] == 0: continue b |= 1 << j X.append(b) A = list(map(int, input().split())) def can(mask) -> bool: b = mask update = True while update: update = False for i in range(N): if b & (1 << i): continue if (b & X[i]) == X[i]: b |= 1 << i update = True return (1 << N) - 1 == b ans = INF for i in range(1 << N): if can(i): cost = 0 for j in range(N): if i & (1 << j): cost += A[j] ans = min(ans, cost) print(ans)