"""
题目来源:
https://www.lanqiao.cn/problems/3543/learning/?page=1&first_category_id=1&name=%E6%9D%BE%E6%95%A3%E5%AD%90%E5%BA%8F%E5%88%97
"""
import os
import sys
# 返回单个字符的价值
def get_value(x):
return ord(x) - ord('a') + 1
# 返回所有松散子序列中最大的价值
def get_maxV(s):
n = len(s)
if n == 0:
return 0
if n == 1:
return get_value(s[0])
# dp[i]表示以s中第i个字符结尾的最大松散子序列的值
# 第i个字符可以要也可以不要, 取其最大值
"""
第一种情况: 要第i个字符
dp[i] = dp[i - 2] + get_value(s[i])
第二种情况: 不要第i个字符
dp[i] = dp[i - 1]
取其最大的那种情况:
dp[i] = max(dp[i - 1], dp[i - 2] + get_value(s[i]))
"""
dp = [0] * n
# 初始化dp
dp[0] = get_value(s[0])
dp[1] = max(dp[0], get_value(s[1]))
for i, v in enumerate(s):
if i < 2:
continue
dp[i] = max(dp[i - 1], dp[i - 2] + get_value(s[i]))
return max(dp)
s = list(input())
print(get_maxV(s))
"""
这道你们可能是对松散子序列的定义感觉好难理解, 其实不要想复杂了,
松散子序列就是在原字符串中取几个不连续的字符, 且字符之间至少间隔一个字符,
在这个问题中, 我们取间隔一个字符来求解问题。
"""
蓝桥杯-松散子序列
最新推荐文章于 2024-08-29 15:45:49 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)