結果
問題 |
No.2686 商品券の使い道
|
ユーザー |
|
提出日時 | 2025-06-25 11:34:18 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 847 ms / 3,000 ms |
コード長 | 814 bytes |
コンパイル時間 | 731 ms |
コンパイル使用メモリ | 82,668 KB |
実行使用メモリ | 92,992 KB |
最終ジャッジ日時 | 2025-06-25 11:34:43 |
合計ジャッジ時間 | 23,863 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 48 |
ソースコード
N,M,Q = map(int, input().split()) A = [] B = [] for i in range(N): a,b = map(int, input().split()) A.append(a) B.append(b) dp1 = [0] * (1<<N)#iの部分集合の中で最も価値が高いパターン dp2 = [0] * (1<<N) for i in range(1<<N): a_sum = 0 b_sum = 0 for j in range(N): if (i>>j) & 1: a_sum += A[j] b_sum += B[j] if a_sum <= M: dp1[i] = b_sum if a_sum <= Q: dp2[i] = b_sum for i in range(N): for j in range(1<<N): if (j&(1<<i)): dp1[j] = max(dp1[j],dp1[j-(1<<i)]) for i in range(N): for j in range(1<<N): if (j&(1<<i)): dp2[j] = max(dp2[j],dp2[j-(1<<i)]) ans = 0 for i in range(1<<N): comp_bit = ((1<<N)-1) ^ i ans = max(ans,dp1[i]+dp2[comp_bit]) print(ans)