题解 | #不相邻取数#

不相邻取数

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

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
河和静子:如果大专也能好过的话,我寒窗苦读几年的书不是白读了?
点赞 评论 收藏
分享
小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务