题解 | #不相邻取数#
不相邻取数
http://www.nowcoder.com/practice/a2be806a0e5747a088670f5dc62cfa1e
主要是思路,从第四个数开始,以这个数i为结尾的"不相邻的数的最大和"是其前方i - 3和i- 2的较大值加上当前值
while True:
try:
n = int(input())
l = list(map(int, input().split()))
dp = [l[0], l[1], l[0] + l[2]] # 初始化,由于不相邻取数,dp需要前3个。dp[i]为以第i个字符为结尾的不相邻的数的最大和
if n == 1: # 1个时候直接输出
print(l[0])
elif n == 2: # 2个的时候,输出两个两个较大的
print(max(l[0], l[1]))
elif n == 3: # 3个的时候, 输出1、3的和与2的太大值
print(max(l[0] + l[2], l[1]))
else: # 大于3的时候进行比较,只需比较与他相隔一字符或两字符的大小中较大的,再加上当前的l[i]即为当前当前不相邻的数的最大和
for i in range(3, n):
dp.append(max(dp[i - 2], dp[i - 3]) + l[i])
print(max(dp)) # 输出dp中较大的一个,即以每个数为结尾的不相邻的数的最大和
except:
break