結果
| 問題 |
No.50 おもちゃ箱
|
| コンテスト | |
| ユーザー |
chocorusk
|
| 提出日時 | 2020-09-10 04:40:04 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 56 ms / 5,000 ms |
| コード長 | 735 bytes |
| コンパイル時間 | 386 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2024-12-17 22:28:40 |
| 合計ジャッジ時間 | 3,231 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 38 |
ソースコード
import sys
read=sys.stdin.buffer.read
readline=sys.stdin.buffer.readline
readlines=sys.stdin.buffer.readlines
import itertools
n=int(readline())
a=list(map(int, readline().split()))
m=int(readline())
b=list(map(int, readline().split()))
b.sort(reverse=True)
ok=[[False]*(1<<n) for _ in range(m)]
for i in range(1<<n):
s=sum(x for j, x in enumerate(a) if i&(1<<j))
for j, y in enumerate(b):
if s<=y:
ok[j][i]=True
dp=[m+1]*(1<<n)
dp[0]=0
for i in range(1<<n):
k=dp[i]
if k>=m:
continue
mask=(1<<n)-1-i
j=mask
while j:
if ok[k][j]:
if dp[i^j]>k+1:
dp[i^j]=k+1
j=(j-1)&mask
if dp[(1<<n)-1]<=m:
print(dp[(1<<n)-1])
else:
print(-1)
chocorusk