我试图提出一段代码来总结给定列表的每个可能组合。
class Answer:
possible = False
def addAll(self, added, rest, answer):
if self.possible or added == answer:
self.possible = True
elif added < answer:
for i in range(0, len(rest)):
temp_rest= rest.copy()
temp_rest.pop(i)
self.addAll(added + rest[i], temp_rest, answer)
n = int(input())
a = Answer()
for rep in range(0, n):
note,cash = list(map(int,input().split()))
notelist = []
a.possible = False
for x in range(0,note):
notelist.append(int(input())) #insert tuple
a.addAll(0,notelist, cash)
if a.possible:
print("Yes")
else: print("No")
我认为这是一个混乱的代码,但它仍然正常,因为我自己尝试。
然而,似乎即使在打印完所有答案之后(&#34;是&#34;和&#34;否&#34;)
程序没有完成。我通过在末尾添加代码exit()
来检查它,然后它提示程序仍在运行。
可能是因为这样,CodeChef问题http://www.codechef.com/problems/MARCHA1给出了NZEC运行时错误。无论如何要抛光这段代码? (我不想在python中使用排列函数)
答案 0 :(得分:0)
def all_sums(x):
s = set()
all_sums_worker(x, s, 0)
return s
def all_sums_worker(x, s, acc):
if len(x) == 0:
s.add(acc)
else:
all_sums_worker(x[1:], s, acc + x[0])
all_sums_worker(x[1:], s, acc)
# the function all_sums(l) returns all possible sums of l