結果
問題 |
No.50 おもちゃ箱
|
ユーザー |
![]() |
提出日時 | 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)