結果
問題 |
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))