首页 > 试题广场 >

字符消除

[编程题]字符消除
  • 热度指数:374 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小明有一个长度为 n ,由前 k 个小写英文字母组成的字符串(保证 n 为偶数)。

小亮想在小明睡觉的时候把这个字符串用小明的零花钱消除干净。
小亮每次可以选择该串的两个相邻的字符删除,删除后将串拼上,并花掉小明一定数量的零花钱。

若某一次删除的相邻两个字符从左到右分别是 ab ,则将花掉小明 cost(a,b) 块钱。小亮希望他花掉的零花钱尽可能多,帮帮小亮。

输入描述:
第一行有两个整数 n,k(1 \leq n \leq 500 , 1 \leq k \leq 26),分别代表小明的字符串长度与字符串中的字符种类数(保证 n 为偶数且串的内容仅由前 k 个小写英文字母组成)。

接下来 k 行给出了一个 k \times k 的由整数构成的矩阵。
矩阵中第 i 行第 j 列的元素代表消除相邻的第 i 个字母和第 j 个字母所能花掉的钱数。

最后一行有一个长度为 n 的字符串,代表小明的字符串。


输出描述:
输出一个值,代表小亮最多能花掉小明多少零花钱。
示例1

输入

4 3
0 1 3
2 0 0
0 0 0
abac

输出

5

说明

如样例中先消除ab再消除ac则可花掉1+3=4元钱,先消除ba再消除ac则可花掉2+3=5元钱。

头像 丨阿伟丨
发表于 2025-09-12 10:01:21
题目链接 字符消除 题目描述 给定一个长度为 ( 为偶数)的、由前 个小写字母组成的字符串。 我们可以执行一种操作:选择字符串中两个相邻的字符并删除它们,删除后剩余部分拼接起来。删除字符 和 ( 在左, 在右)需要花费 。 目标是求出将整个字符串完全消除所能得到的最大总花费。 解题思路 这是一个 展开全文