結果
問題 |
No.2686 商品券の使い道
|
ユーザー |
|
提出日時 | 2024-03-20 21:24:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,533 ms / 3,000 ms |
コード長 | 1,179 bytes |
コンパイル時間 | 244 ms |
コンパイル使用メモリ | 82,160 KB |
実行使用メモリ | 93,440 KB |
最終ジャッジ日時 | 2024-09-30 07:11:19 |
合計ジャッジ時間 | 38,954 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 48 |
ソースコード
import sys, time, random from collections import deque, Counter, defaultdict input = lambda: sys.stdin.readline().rstrip() ii = lambda: int(input()) mi = lambda: map(int, input().split()) li = lambda: list(mi()) inf = 2 ** 63 - 1 mod = 998244353 n, m, q = mi() AB = [li() for _ in range(20)] before = [0] * (1 << n) for bit in range(1 << n): value = 0 weight = 0 for i in range(n): if 1 & (bit >> i): value += AB[i][1] weight += AB[i][0] if weight <= m: before[bit] = value for bit in range(1 << n): for i in range(n): if (1 & (bit >> i)): before[bit] = max(before[bit ^ (1 << i)], before[bit]) after = [0] * (1 << n) for bit in range(1 << n): value = 0 weight = 0 for i in range(n): if 1 & (bit >> i): value += AB[i][1] weight += AB[i][0] if weight <= q: after[bit] = value for bit in range(1 << n): for i in range(n): if (1 & (bit >> i)): after[bit] = max(after[bit - (1 << i)], after[bit]) ans = 0 for bit in range(1 << n): ans = max(ans, before[bit] + after[(1 << n) - 1 - bit]) print(ans)