結果
| 問題 | No.15 カタログショッピング | 
| コンテスト | |
| ユーザー |  titia | 
| 提出日時 | 2021-11-04 05:32:20 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 118 ms / 5,000 ms | 
| コード長 | 797 bytes | 
| コンパイル時間 | 152 ms | 
| コンパイル使用メモリ | 81,916 KB | 
| 実行使用メモリ | 91,392 KB | 
| 最終ジャッジ日時 | 2024-10-14 00:26:46 | 
| 合計ジャッジ時間 | 1,641 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 10 | 
ソースコード
N,S=map(int,input().split())
P=[int(input()) for i in range(N)]
Q=P[:N//2]
R=P[N//2:]
L=N//2
DP0=[0]*(1<<L)
L0=L
for i in range(1<<L):
    X=0
    for j in range(L):
        if i & (1<<j) != 0:
            X+=Q[j]
    DP0[i]=X
L=N-N//2
DP1=dict()
for i in range(1<<L):
    X=0
    for j in range(L):
        if i & (1<<j) != 0:
            X+=R[j]
    if X in DP1:
        DP1[X].append(i)
    else:
        DP1[X]=[i]
ANS=[]
for i in range(1<<L0):
    if S-DP0[i] in DP1:
        k=bin(i)[2:].zfill(L0)
        for j in DP1[S-DP0[i]]:
            l=bin(j)[2:].zfill(L)
            s=k[::-1]+l[::-1]
            X=[]
            for l in range(N):
                if s[l]=="1":
                    X.append(l+1)
            ANS.append(X)
for ans in sorted(ANS):
    print(*ans)
        
            
            
            
        