結果
問題 |
No.1284 Flip Game
|
ユーザー |
![]() |
提出日時 | 2023-02-05 23:26:36 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 471 ms / 2,000 ms |
コード長 | 956 bytes |
コンパイル時間 | 185 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 115,116 KB |
最終ジャッジ日時 | 2024-07-04 08:45:52 |
合計ジャッジ時間 | 5,454 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 28 |
ソースコード
N = int(input()) C = [] for i in range(N): C.append(list(map(int, input().split()))) inf = 10 ** 18 N2 = 1 << (2 * N) dp = [[inf] * N for i in range(N2)] for i in range(N): dp[1 << i][i] = 0 for s in range(1, N2): for p in range(N): if (s >> p) & 1 == 0: continue for q in range(N): if p == q: continue if (s >> q) & 1 and (s >> (q + N)) & 1: continue # if (s >> (p + N)) & 1: # ns = s ^ (1 << (p + N)) # else: # ns = s ^ (1 << p) if (s >> q) & 1 == 0: ns = s | (1 << q) dp[ns][q] = min(dp[ns][q], dp[s][p] + C[p][q]) else: ns = s | (1 << (q + N)) dp[ns][q] = min(dp[ns][q], dp[s][p] + C[p][q]) ans = min(dp[-1]) for i in range(N): ans = min(ans, dp[(N2 - 1)^(1 << (i + N))][i]) print(ans)