题解 | #不相邻取数#

不相邻取数

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
全部评论

相关推荐

01-01 23:23
复旦大学 Java
点赞 评论 收藏
分享
程序员牛肉:继续沉淀吧同学,你这就是纯纯的流水线产品。 差不多的学历+两个烂大街项目。自身学历又不行,现在找啥实习呢。有点太浮躁了。多花点心思搞搞ai,开源和八股。这比你这段时间捣鼓一段小厂实习要好得多;
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-11-05 08:26
面了100年面试不知...:哎呀,导师一不小心发现我要出去实习了,不同意,要不不让我毕业
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务