第十四届 蓝桥杯省赛 PythonB组 个人解题思路

s = input().strip()
dp = [0] * (len(s) + 1)
dp[1] = ord(s[0]) - 96
for i in range(2,len(s) + 1):
    dp[i] = max(dp[i - 2] + ord(s[i - 1]) - 96,dp[i - 1])
print(dp[len(s)])

#第I题:样例输入第一行为"4 4"
#二分答案 + 区间合并
def check(t):#判断t时刻 是否能让管道全部检测到水
    brr = []#每个在t时刻 打开的阀门的左右区间 宽度
    for i in range(n):
        if arr[i][0] > t:break
        Si,Li = arr[i]
        #保持l最小是1 r最大是Len 超过就没有必要判断了 
        l,r = max(1,Li - (t - Si)),min(Len,Li + (t - Si))
        brr.append((l,r))
    brr.sort(key=lambda x:x[0])#按左端点排序
    #区间合并
    end = 0
    for l,r in brr:
        if l - end > 1:return False
        end = max(end,r)
        if end == Len:return True
    return end == Len
    


def main():
    l,r = 1,Len + arr[-1][0] + 100
    ans = r
    while l <= r:
        mid = (l + r) // 2
        if check(mid):ans = mid;r = mid - 1
        else:l = mid + 1
    return ans
        


n,Len = ma
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值