結果
問題 | No.50 おもちゃ箱 |
ユーザー |
![]() |
提出日時 | 2025-03-19 06:02:59 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 145 ms / 5,000 ms |
コード長 | 923 bytes |
コンパイル時間 | 483 ms |
コンパイル使用メモリ | 82,732 KB |
実行使用メモリ | 76,880 KB |
最終ジャッジ日時 | 2025-03-19 06:03:04 |
合計ジャッジ時間 | 4,925 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 38 |
ソースコード
INF = 1 << 60 N = int(input()) A = list(map(int, input().split())) # おもちゃ M = int(input()) B = list(map(int, input().split())) # はこ B.sort(reverse=True) def bit_subsets(bit: int): b = bit while b: yield b b = (b-1) & bit ans = INF dp = [[False] * (1 << N) for _ in range(M+1)] # i : i 番目の箱までみて # j : 箱に入れたおもちゃ達 j (ビット列) dp[0][0] = True mask = (1 << N) - 1 for i in range(M): for a in range(1 << N): if dp[i][a] == 0: continue for b in bit_subsets(mask ^ a): # 箱 i に入れるおもちゃ(ビット列) cap = 0 for k in range(N): if b & (1 << k): cap += A[k] if cap <= B[i]: dp[i+1][a | b] = True if (a | b) == mask: ans = min(ans, i+1) if ans == INF: print(-1) else: print(ans)