计算得分 题面描述 小杨想要计算由m个小写字母组成的字符串的得分。 小杨设置了一个包含n个正整数的计分序列A=[a1,a2,...,an],如果字符串的一个子串由k(1≤k≤n)个abc首尾相接组成,那么能够得到分数ak,并且字符串包含的字符不能够重复计算得分,整个字符串的得分是计分子串的总和。 例如,假设n=3,字符串dabcabcabcabzabc的所有可能计分方式如下: d+ac+abcabc+abz+abc或者d+abcac+ac+abz+abc,其中d和abz不计算得分,总得分为a1+a2+a1 d+abc+abc+abc+abz+abc,总得分尾a1+a1+a1+a1 d+abcabcabc+abz+abc,总得分为a3+a1 小杨想知道对于给定的字符串,最大总得是多少、 输入格式 第一行包含一个正整数n,代表计分序列N 的长度。 第二行包含n个正整数,代表计分序列A。 第三行包含一个正整数m,代表字符串的长度。 第四行包含一个由m个小写字母组成的字符串。 输出格式 输出一个整数,代表给定字符串的最大总得分。 样例1 样例解释 最优的计分方式为d+abc+abc+abc+abz,总得分尾a1+a1+a1,共9分。 数据范围


正确答案:把串按连续重复的abc分段(非abc字符断开)。每段含k个abc时段内DP:f[0]=0,f[k]=max(1<=j<=k)(f[k-j]+a[j]),表示该k个abc合并为一块得a[j]或拆开。各段f[k]相加即最大得分。核心:扫描串,匹配abc则cur++,遇非abc结算ans+=f[cur]并清零。
试卷来源:202406 CCF-GESP编程能力等级认证C++六级真题