e04 python嘗試了好久還是過不了:
e04 python嘗試了好久還是過不了:
# a981. 求和問題import sysdata = list(map(int, sys.stdin.read().split()))sys.setrecursionlimit(10000000)n = data.pop(0)m = data.pop(0)data.sort(reverse = False)
middle = len(data) // 2left = data[:middle]right = data[middle:]
def subset(arr):result = []length = len(arr)
def dfs(idx, total, current_list):if idx == length:result.append((current_list, total))returnelse:dfs(idx+1, total+arr[idx], current_list + [arr[idx]])dfs(idx+1, total, current_list)
dfs(0, 0, [])return result
left = subset(left)right = subset(right)
right_map = {}for arr, sums in right:if sums not in right_map:right_map[sums] = []right_map[sums].append(arr)
result = []for arr_left, sums in left:remain = m - sumsif remain in right_map:for arr_right in right_map[remain]:ans = arr_left + arr_rightresult.append(ans)
result.sort()if result:for nums in result:print(*nums)else:print(-1)
e04 python嘗試了好久還是過不了:
# a981. 求和問題import sysdata = list(map(int, sys.stdin.read().split()))sys.setrecursionlimit(10000000)n = data.pop(0)m = data.pop(0)data.sort(reverse = False)
middle = len(data) // 2left = data[:middle]right = data[middle:]
def subset(arr):result = []length = len(arr)
def dfs(idx, total, current_list):if idx == length:result.append((current_list, total))returnelse:dfs(idx+1, total+arr[idx], current_list + [arr[idx]])dfs(idx+1, total, current_list)
dfs(0, 0, [])return result
left = subset(left)right = subset(right)
right_map = {}for arr, sums in right:if sums not in right_map:right_map[sums] = []right_map[sums].append(arr)
result = []for arr_left, sums in left:remain = m - sumsif remain in right_map:for arr_right in right_map[remain]:ans = arr_left + arr_rightresult.append(ans)
result.sort()if result:for nums in result:print(*nums)else:print(-1)
import sys
def solve():
# 讀取輸入
try:
line1 = sys.stdin.readline().split()
if not line1:
return
n, m = map(int, line1)
line2 = sys.stdin.readline().split()
if not line2:
return
nums = sorted(list(map(int, line2)))
except EOFError:
return
found = False
results = []
def backtrack(start, current_sum, path):
nonlocal found
if current_sum == m:
print(*(path))
found = True
return
if current_sum > m:
return
for i in range(start, n):
# 剪枝:如果當前數字加上去已經超過 m,後面的數字更大,一定也超過
if current_sum + nums[i] > m:
break
path.append(nums[i])
backtrack(i + 1, current_sum + nums[i], path)
path.pop()
backtrack(0, 0, [])
if not found:
print("-1")
if __name__ == "__main__":
solve()