結果
| 問題 |
No.3130 Twin's Add Max Min Game
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2025-02-17 02:59:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,162 bytes |
| コンパイル時間 | 146 ms |
| コンパイル使用メモリ | 81,912 KB |
| 実行使用メモリ | 107,148 KB |
| 最終ジャッジ日時 | 2025-02-17 03:03:13 |
| 合計ジャッジ時間 | 4,546 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 TLE * 1 -- * 1 |
| other | -- * 56 |
ソースコード
# 愚直DFSケース
from collections import Counter
N = int(input())
A = sorted(map(int, input().split()))
S = Counter(input().split())
INF = 10 ** 18
def dfs(remain_A, remain_S, x):
if len(remain_A) == sum(remain_S.values()) == 1:
if remain_S["add"] == 1:
return x + remain_A[0]
elif remain_S["max"] == 1:
return max(x, remain_A[0])
else:
return min(x, remain_A[0])
result = -INF
for i in range(len(remain_A)):
val = INF
if remain_S["add"] > 0:
val = min(val, dfs(remain_A[:i] + remain_A[i + 1:], {"add": remain_S["add"] - 1, "max": remain_S["max"], "min": remain_S["min"]}, x + remain_A[i]))
if remain_S["max"] > 0:
val = min(val, dfs(remain_A[:i] + remain_A[i + 1:], {"add": remain_S["add"], "max": remain_S["max"] - 1, "min": remain_S["min"]}, max(x, remain_A[i])))
if remain_S["min"] > 0:
val = min(val, dfs(remain_A[:i] + remain_A[i + 1:], {"add": remain_S["add"], "max": remain_S["max"], "min": remain_S["min"] - 1}, min(x, remain_A[i])))
result = max(result, val)
return result
print(dfs(A, S, 0))