結果
問題 |
No.2686 商品券の使い道
|
ユーザー |
![]() |
提出日時 | 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)