给出一个全是正整数的序列和一个极限值M,要求求出在小于等于M的最大子序列和(连续和不连续都可),M的范围小于10**9
你的初始想法是什么呢? 你能描述一下么?
副总裁让你举个栗子
大概明白你的想法,不考虑时间复杂度的话,用深搜可以完成。找到子序列的和如果等于M,则立即跳出搜索,如果大于M,则继续尝试下一组。如果所有的子序列和都小于M,则找出和最大的一组。
以下面代码为例,在序列nums中找出序列和不大于M的最大子序列,结果为[2,4,8,10],序列和为24,当然,答案不唯一。
nums = [2,4,6,8,10]
res = []
M = 25
def dfs(nums,que):
if que: res.append(que)
for i in range(len(nums)):
if sum(que)==M: return True
if sum(que)+nums[i]>M: continue
temp = dfs(nums[i+1:],que+[nums[i]])
if temp: return True
dfs(nums,list())
print(max(res,key=sum))