def addSum(no,li,memo={}): if no in memo:return memo[no] if no==0:return [] if no<0:return None bestsum=None for l in li: remainder=no-l remainderlist=addSum(remainder,li,memo) if remainderlist!=None: remainderlist.append(l) if bestsum==None or len(remainderlist)<len(bestsum): bestsum=remainderlist memo[no]=bestsum return bestsum print(addSum(130,[5,3,2,10]))