結果
| 問題 |
No.2686 商品券の使い道
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-03-20 23:32:33 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,855 bytes |
| コンパイル時間 | 253 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 192,932 KB |
| 最終ジャッジ日時 | 2024-09-30 09:35:07 |
| 合計ジャッジ時間 | 58,695 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 1 |
| other | AC * 16 WA * 32 |
ソースコード
n,m,q=map(int,input().split())
ab=[]
for i in range(n):
a,b=map(int,input().split())
ab.append([a,b])
katidp = [[0 for i in range(1 << n)] for i in range(2)]
resdp = [[0 for i in range(1 << n)] for i in range(2)]
resdp[0][0] = m
resdp[1][0] = q
que = set([0])
for j in range(n):
nq = set()
while que:
state = que.pop()
mkati = katidp[0][state]
qkati = katidp[1][state]
mres = resdp[0][state]
qres = resdp[1][state]
for k in range(n):
if state & (1 << k):
continue
else:
nstate = state | (1 << k)
nq.add(nstate)
kati = ab[k][1]
val = ab[k][0]
if mres < val:
nres = mres
nkati = mkati
else:
nkati = mkati + kati
nres = mres - val
if katidp[0][nstate] < nkati:
katidp[0][nstate] = nkati
resdp[0][nstate] = nres
elif katidp[0][nstate] == nkati:
if resdp[0][nstate] < nres:
resdp[0][nstate] = nres
if qres < val:
nres = qres
nkati = mkati
else:
nkati = mkati + kati
nres = qres - val
if katidp[1][nstate] < nkati:
katidp[1][nstate] = nkati
resdp[1][nstate] = nres
elif katidp[1][nstate] == nkati:
if resdp[1][nstate] < nres:
resdp[1][nstate] = nres
que = nq
# print(katidp)
mask = (1 << n) - 1
ans = 0
for i in range(1 << n):
j = mask ^ i
ans = max(ans, katidp[0][i] + katidp[1][j])
print(ans)