B18 - Subset Sum with Restoration
https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_cq
提出
code: python
n, s = map(int, input().split())
a = list(map(int, input().split()))
# 2 2 3
# dpij := i 枚までで合計 j にできるか
dp = [0 * (s+1) for _ in range(n+1)]
dp00 = True
for j in range(1, s+1):
dp0j = False
for i in range(1, n+1):
for j in range(s+1):
if dpi-1j:
dpij = True
elif j - ai-1 >= 0 and dpi-1[j - ai-1]:
dpij = True
else:
dpij = False
while True:
if
解答
code: python
n, s = map(int, input().split())
a = list(map(int, input().split()))
# 2 2 3
# dpij := i 枚までで合計 j にできるか
dp = [0 * (s+1) for _ in range(n+1)]
dp00 = True
for j in range(1, s+1):
dp0j = False
for i in range(1, n+1):
for j in range(s+1):
if dpi-1j:
dpij = True
elif j - ai-1 >= 0 and dpi-1[j - ai-1]:
dpij = True
else:
dpij = False
if dpns == False:
print("-1")
exit()
# [True, False, False, False, False, False, False, False,
# True, False, True, False, False, False, False, False,
# True, False, True, False, True, False, False, False,
# True, False, True, True, True, True, False, True]
ans = []
p = s
for i in reversed(range(1,n+1)):
# カード i を選ばない
if dpi-1p == True:
p = p - 0
# カード i を選ぶ
else:
p = p - ai-1
ans.append(i)
ans.reverse()
ans2 = str(i) for i in ans
print(len(ans))
print(" ".join(ans2))