首页 > 其他分享 >蓝桥杯真题代码记录(松散子序列

蓝桥杯真题代码记录(松散子序列

时间:2024-04-01 23:58:38浏览次数:15  
标签:真题 max 间隔 蓝桥 num 序列 松散 代码 dp

目录

1. 题目:

在这里插入图片描述

给定一个仅含小写字母的字符串 s ,假设 s 的一个子序列 t 的第 i 个字符 对应了原字符串中的第 pi 个字符。我们定义 s 的一个松散子序列为:对于 i > 1 总是有 pi − pi−1 ≥ 2 。设一个子序列的价值为其包含的每个字符的价值之和 ( a ∼ z 分别为 1 ∼ 26 ) 。

求 s 的松散子序列中的最大价值。

输入格式

输入一行包含一个字符串 s 。

输出格式

输出一行包含一个整数表示答案。

样例输入

azaazaz

样例输出

78

2. 我的代码:

# 输入,字符变为值
s = list(input())
num_s = [0] + [ord(i) - 96 for i in s]

# 动态规划
dp = [0] * len(num_s)
dp[1] = num_s[1]
dp[2] = num_s[2]

for i in range(3, len(num_s)):
    dp[i] = max(dp[i - 2], dp[i - 3]) + num_s[i]

print(max(dp[-1], dp[-2]))

这道题题目比较难读懂,慢慢读题,比如说:azaazaz的一个松散子序列可以是zzz,只要相隔为1个以上即可。可以仔细想一想,我们可以间隔1个,那么也可以间隔2个,那可以间隔3个吗。很明显再间隔大了就无意义了。因为间隔3个的时候正中间的数加上一定比不加上会大,所以,我们就推理得到了递推公式:dp[i] = max(dp[i - 2], dp[i - 3]) + num_s[i]

由于递推公式需要用到前面3个元素的长度,所以,初始化最开始的3个元素。并且把0索引变为0,方便递推逻辑。

最后,要得到最后结果,必须是max(dp[-1], dp[-2]),因为有可能最后一个元素不加上的时候子序列更大。

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可:

标签:真题,max,间隔,蓝桥,num,序列,松散,代码,dp
From: https://blog.csdn.net/m0_72249799/article/details/137250813

相关文章

  • 【华为OD机试真题】A卷-优秀学员统计(JAVA)
    一、题目描述【华为OD机试真题】A卷-优秀学员统计(JAVA)题目描述:公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。请你实现......
  • 【华为OD机试真题】A卷-预定酒店(JAVA)
    一、题目描述【华为OD机试真题】A卷-预定酒店(JAVA)题目描述:放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格二、输入输出输入描述:第一行:n,k,x......
  • 蓝桥杯——省赛题
    目录题目一:日期统计: 我的思路——错误代码: 示例代码一思考:知识点总结:1.setuniqueSet;2..size()3.日期匹配示例方法二思考:题目二:01串的熵我的思路:错误总结:题目三:冶炼金属我的思路:题目一:日期统计: 我的思路——错误代码:    蠢方法:不断使用for循环......
  • 蓝桥杯单片机速成2-动态数码管数码管显示
    一、原理图段选给1是选中,该数码管是共阳极的数码管,位选输入0才会电亮一位二、代码分析/*************本地常量声明**************/u8codet_display[]={//标准字库//0123456789ABC......
  • P8649 [蓝桥杯 2017 省 B] k 倍区间
    importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);//读取输入的整数n和kintn=sc.nextInt();//数组长度intk=sc.nextInt();//取模的值......
  • 蓝桥备赛——贪心(2)
    题干 我的代码dic={'*':1,'o':0}s1=input()s2=input()s1=list(s1)s2=list(s2)num1=''num2=''foriins1:#print(i)num1=num1+str(dic[i])forjins2:num2+=str(dic[j])#print(num1)#print(num2)num1=l......
  • 小球投盒(美团2024届秋招笔试第三场编程真题)
    核心思想用一个队列存储还没有球的盒子一旦有2操作那就剩下1个盒子没有球代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){TreeSet<Integer>q=newTreeSet<>();Scannerscanner=newScanner(System.in)......
  • CCF CSP模拟真题解答示例
    CCFCSP(CertifiedSoftwareProfessional)是中国计算机学会主办的软件能力认证考试,旨在评估参赛者在计算机科学和软件工程方面的基本知识和实践能力。请注意,以下解答仅作为示例,并非针对实际真题的准确答案。实际考试中的题目和答案可能会有所不同,因此建议参考官方发布的真题......
  • 平均数为k的最长连续子数组(美团2024届秋招笔试第三场编程真题)
    核心思想每个数-k计算前缀和并放入mapkey=前缀和value=当前下标由于需要最长的子数组所以只记录最先存在的下标出现重复的前缀和说明存在平均值为k的区间[pre+1,i]importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Sc......
  • [蓝桥杯 2019 省赛 AB] 完全二叉树的权值
    #[蓝桥杯2019省AB]完全二叉树的权值##题目描述给定一棵包含$N$个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是$A_1,A_2,\cdotsA_N$,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有......