题解 | 宵暗的妖怪

宵暗的妖怪

https://www.nowcoder.com/practice/173a1b0d94fb44b3a98573b232b01db2

def main():
    import sys
    input = sys.stdin.read().split()
    n = int(input[0])
    a = list(map(int, input[1:n+1]))
    
    # 边界情况:只有3段时,只能选这三段,得中间值
    if n == 3:
        print(a[1])
        return
    
    # 定义dp数组:dp[i] 表示前i个位置(0~i)能获得的最大饱食度
    dp = [0] * n
    # 初始化:
    # dp[0] = 0(只有1段,无法操作)
    # dp[1] = 0(只有2段,无法操作)
    # dp[2] = a[1](前3段,选0-1-2,得a[1])
    dp[2] = a[1]
    
    # 从第4个位置(i=3)开始遍历
    for i in range(3, n):
        # 状态转移:
        # 1. 不选包含i的三段 → 最大为dp[i-1]
        # 2. 选包含i的三段(即i-2, i-1, i)→ 得a[i-1] + dp[i-3](前i-3个位置的最大值)
        dp[i] = max(dp[i-1], a[i-1] + dp[i-3])
    
    print(dp[-1])

if __name__ == "__main__":
    main()

全部评论

相关推荐

12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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