#P1171. Letter Game
Letter Game
题目描述

字母游戏在家庭和电视节目中非常流行。在这个游戏中,每个小写字母都有一个对应的分值(如图1所示)。玩家需要利用收集到的字母组成一个或多个单词,以获得最高分。
规则:
- 只能使用已收集的字母,且每个字母的使用次数不能超过收集到的数量。
- 单词必须来自给定的字典(包含不超过 个单词)。
- 可以组成单个单词或两个单词的组合(组合的分值为两个单词的分值之和)。
- 目标是找到分值最高的单词或单词组合。
输入格式
程序从标准输入读取数据:
- 第一行:一个由小写字母(
'a'-'z'
)组成的字符串,表示收集到的字母(长度 )。 - 接下来若干行:字典文件,每行一个单词(长度 ),按字典序排列且无重复。
- 字典结束标志:单独一行包含一个点(
.
)。
输出格式
程序向标准输出写入结果:
- 一行,表示可能的最高分值。
输入样例 1
prmgroa
profile
program
prom
rag
ram
rom
.
输出样例 1
24
补充说明
- 字母分值表(假设):
- 例如:
a=1, b=3, c=3, ..., z=10
(具体分值需参考题目给出的图1)。
- 例如:
- 计算方式:
- 检查每个单词是否可以由收集到的字母组成(字母计数匹配)。
- 计算所有可能的单单词或双单词组合的分值,取最大值。
- 优化建议:
- 由于输入规模较大(字典最多 个单词),建议使用高效算法(如哈希统计字母频率+暴力枚举可行组合)。
scanf
比cin
更快,适用于大规模数据读取。
示例解析
- 输入字母:
p, r, m, g, r, o, a
- 可行单词:
program
(假设分值 )prom
(假设分值 )rag
(假设分值 )- 其他单词可能因字母不足或分值较低被排除。
- 最优解:
program
(单单词,分值 )。