結果
問題 | No.2364 Knapsack Problem |
ユーザー |
|
提出日時 | 2025-04-12 17:52:23 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 78 ms / 3,000 ms |
コード長 | 1,322 bytes |
コンパイル時間 | 527 ms |
コンパイル使用メモリ | 82,796 KB |
実行使用メモリ | 76,808 KB |
最終ジャッジ日時 | 2025-04-12 17:52:27 |
合計ジャッジ時間 | 3,187 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
## https://yukicoder.me/problems/no/2364 MIN_VALUE = -10 ** 18 def main(): N, M, W = map(int, input().split()) A = list(map(int, input().split())) B = list(map(int, input().split())) C = list(map(int, input().split())) D = list(map(int, input().split())) dp = [None for _ in range(2 ** (N + M))] for bit in range(2 ** (N + M)): weight = 0 value = 0 for i in range(N): if bit & (1 << i) > 0: weight += A[i] value += B[i] for i in range(M): if bit & (1 << (N + i)) > 0: weight -= C[i] value -= D[i] if 0 <= weight <= W: dp[bit] = value dp2 = [False] * (2 ** (N + M)) dp2[0] = True for bit in range(2 ** (N + M)): if not dp2[bit]: continue for i in range(N + M): if (1 << i) & bit > 0: continue new_bit = (1 << i) | bit if dp[new_bit] is None: continue dp2[new_bit] |= dp2[bit] answer = MIN_VALUE for bit in range(2 ** (N + M)): if dp2[bit]: answer = max(answer, dp[bit]) print(answer) if __name__ == "__main__": main()