子集和问题的实现给出了错误的答案

Implementation of subset sum problem is giving wrong answer

我想为子集和问题实现一个解决方案。但在下面的实现中,所有测试用例都返回 'No'。有人可以指出代码中的问题吗?

def isSubls(l, n, s):

    if s == 0:
        return 'Yes'
    if n == 0 and s != 0:
        return False
    if l[n - 1] > s:
        return isSubls(l, n - 1, s)

    return isSubls(l, n-1, s) or isSubls(l, n-1, s-l[n-1])


def run():

    for _ in range(int(input())):

        n, m = map(int, input().split())
        l = []

        for i in range(n):
            l.append(int(input()))

        print(isSubls(l, n, m))


run()

方法isSubls()完全正确。

我测试了你的代码如下:

def isSubls(l,n, s) : 
    if (s == 0) : 
        return True
    if (n == 0 and s != 0) : 
        return False 
    if (l[n - 1] > s) : 
        return isSubls(l, n - 1, s); 
    return isSubls(l, n-1, s) or isSubls(l, n-1, s-l[n-1]) 


set = [3, 34, 4, 12, 5, 2] 
sum = 9
n = len(set) 
if (isSubls(set, n, sum) == True) : 
    print("Found a subset with given sum") 
else : 
    print("No subset with given sum") 

判决: