题解 | 小红的双排列删除得分

小红的双排列删除得分

https://www.nowcoder.com/practice/936b2a6a94bc43f6a79b74025b93f944

import sys
n=int(input())
a=[0]+list(map(int,input().split()))
M=0#记录最大和
start=[0]*(n+1)#存储元素a[i]的下标
S=[0]*(2*n+1)#前i个元素之和
dp=[0]*(2*n+1)#记录到i为止最高分
for i in range(1,2*n+1):
    S[i]=a[i]+S[i-1]
    #获取当前元素的开始下标
    star=start[a[i]]
    if star:
        #计算star到当前的元素和
        cur =S[i]-S[star-1]
        #可以删除多段区间
        #dp[star-1]为这个区间开始之前的最佳得分
        dp[i]=dp[star-1]+cur
    else:
        start[a[i]]=i#记录第一次出现位置
    dp[i]=max(dp[i],dp[i-1])    
print(dp[2*n])

全部评论

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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