#arc0103. [arc010_3]積み上げパズル
[arc010_3]積み上げパズル
问题描述
高桥君决定玩一个游戏,规则如下:
有 种颜色的方块总共有 个,每个方块都会依次掉落。
每次方块掉落时,高桥君可以选择将该方块放到一个堆中或者丢弃它。
堆中的方块只能按照顺序堆叠,新掉落的方块必须叠放在已有堆顶的方块上。
当所有方块都掉落完毕后,根据以下规则对堆进行评价:
- 颜色奖励:每种颜色的方块都有特定的得分,根据堆中包含的方块个数来计算。
- 连击奖励:如果同一种颜色的方块连续叠放了 个,则根据连击奖励系数 得分为 。
- 全色奖励:如果堆中至少包含了每种颜色的方块各一个,则得分为 。
给定方块的种类和顺序以及评价所需的得分,求最大得分。
输入
输入从标准输入中读取,具体格式如下:
:
:
- 第一行包含以半角空格分隔的四个整数 。
- 是方块的数量,满足 。
- 是方块的颜色总数,满足 。
- 是连击奖励系数,满足 。
- 是全色奖励得分,满足 。
- 均为整数。
- 接下来的 行中,每行包含一个颜色和其对应的颜色奖励得分。
- 是第 种颜色的方块。
- 是对应颜色的颜色奖励得分。
- 是大写英文字母(
A
-Z
), 满足 。 - 每种颜色的奖励得分不重复( 时 )。
- 第 行是一个长度为 的字符串,表示方块掉落的顺序。
- 是第 个掉落的方块的颜色。
- 只能是 中的一个。
输出
将可以获得的最大得分输出到标准输出中,以一行形式输出。
末尾必须输出换行符。
输入样例 1
5 3 3 5
R 1
G 1
B 1
RGBRR
输出样例 1
13
-
如果将所有方块都放入堆中,
- 颜色奖励:每种颜色的得分都是 ,所以得分为 点 × 个方块 点
- 连击奖励:因为有 个连续的 R 方块,所以得分为 点
- 全色奖励:因为每种颜色至少有 个方块,所以得分为 点
总得分为 点。
-
如果丢弃任何一个方块,得分都会低于 点,所以最大得分为 点。
输入样例 2
3 3 3 5
R 1
G 3
B 2
RBR
输出样例 2
5
-
将所有方块都放入堆中,
- 颜色奖励: 个 分的方块 + 个 分的方块 分
- 没有连续的方块,所以连击奖励和全色奖励都是 分
总得分为 分。
-
但是,如果丢弃方块 B,将 RR 放入堆中,
- 颜色奖励: 个 分的方块 分
- 连击奖励: 分
最大得分为 分。
输入样例 3
8 3 5 3
R 1
G 1
B 1
RRGRRBRR
输出样例 3
31
- 如图 所示,总共掉落了 个方块。
- 如果将所有方块都放入堆中,如图 所示,可以得到 组连击,每组 个。
- 此外,还满足全色奖励条件,所以得分为 分 × 个 + 分 × 个 × 组 分 分。
- 但是,如果只将 R 方块放入堆中,如图 所示,可以得到 分 × 个 + 分 × 分 $=