結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)    
0