結果
| 問題 |
No.771 しおり
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:18:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,098 ms / 2,000 ms |
| コード長 | 1,066 bytes |
| コンパイル時間 | 173 ms |
| コンパイル使用メモリ | 82,440 KB |
| 実行使用メモリ | 181,200 KB |
| 最終ジャッジ日時 | 2025-03-20 20:19:58 |
| 合計ジャッジ時間 | 15,657 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 43 |
ソースコード
n = int(input())
A = []
B = []
for _ in range(n):
a, b = map(int, input().split())
A.append(a)
B.append(b)
INF = float('inf')
dp = [[INF] * n for _ in range(1 << n)]
# Initialize for single book
for i in range(n):
dp[1 << i][i] = 0
# Process all masks in increasing order of bits
for mask in range(1 << n):
# Iterate over each possible last book in the mask
for last in range(n):
if not (mask & (1 << last)):
continue # last is not in the current mask
current_max = dp[mask][last]
if current_max == INF:
continue
# Try to add each possible next book
for j in range(n):
if mask & (1 << j):
continue # j is already in mask
new_mask = mask | (1 << j)
new_gap = B[last] - A[last] + A[j]
new_max = max(current_max, new_gap)
if new_max < dp[new_mask][j]:
dp[new_mask][j] = new_max
full_mask = (1 << n) - 1
min_ugliness = min(dp[full_mask][last] for last in range(n))
print(min_ugliness)
lam6er