結果
| 問題 |
No.2686 商品券の使い道
|
| コンテスト | |
| ユーザー |
rlangevin
|
| 提出日時 | 2024-03-24 19:04:27 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 640 ms / 3,000 ms |
| コード長 | 752 bytes |
| コンパイル時間 | 149 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 92,544 KB |
| 最終ジャッジ日時 | 2024-09-30 13:53:53 |
| 合計ジャッジ時間 | 17,934 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 48 |
ソースコード
import sys
input = sys.stdin.readline
def zeta(A, N, op):
for i in range(N):
for bit in range(1 << N):
if (bit & (1 << i)):
A[bit] = op(A[bit], A[bit^(1<<i)])
return A
N, M, Q = map(int, input().split())
A, B = [0] * N, [0] * N
for i in range(N):
A[i], B[i] = map(int, input().split())
N2 = 1 << N
inf = 10 ** 18
dpM, dpQ = [-inf] * N2, [-inf] * N2
for s in range(N2):
x, y = 0, 0
for i in range(N):
if (s >> i) & 1:
x += A[i]
y += B[i]
if x <= M:
dpM[s] = y
if x <= Q:
dpQ[s] = y
dpM = zeta(dpM, N, max)
dpQ = zeta(dpQ, N, max)
ans = 0
for s in range(N2):
ans = max(ans, dpM[s] + dpQ[(N2 - 1) ^ s])
print(ans)
rlangevin