首页 > 试题广场 >

字符消除

[编程题]字符消除
  • 热度指数: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元钱。

这道题你会答吗?花几分钟告诉大家答案吧!