另外两个经典题的答案
打家劫舍 [2, 7, 9, 3, 1]、最大子段和 [-2, 1, -3, 4, -1, 2, 1, -5, 4]。运行下面这段程序:
def rob(a):
dp = [0] * (len(a) + 1)
if a:
dp[1] = a[0]
for i in range(2, len(a) + 1):
dp[i] = max(dp[i - 1], dp[i - 2] + a[i - 1])
return dp
def max_sub(a):
best = a[0]
cur = a[0]
for x in a[1:]:
cur = max(x, cur + x)
best = max(best, cur)
return best
print(str(rob([2, 7, 9, 3, 1])[-1]) + "/" + str(max_sub([-2, 1, -3, 4, -1, 2, 1, -5, 4])))
全部评论