#P1171. Letter Game

Letter Game

题目描述

字母游戏在家庭和电视节目中非常流行。在这个游戏中,每个小写字母都有一个对应的分值(如图1所示)。玩家需要利用收集到的字母组成一个或多个单词,以获得最高分。

规则

  • 只能使用已收集的字母,且每个字母的使用次数不能超过收集到的数量
  • 单词必须来自给定的字典(包含不超过 40,00040,000 个单词)。
  • 可以组成单个单词两个单词的组合(组合的分值为两个单词的分值之和)。
  • 目标是找到分值最高的单词或单词组合

输入格式

程序从标准输入读取数据:

  1. 第一行:一个由小写字母('a'-'z')组成的字符串,表示收集到的字母(长度 373 \sim 7)。
  2. 接下来若干行:字典文件,每行一个单词(长度 373 \sim 7),按字典序排列无重复
  3. 字典结束标志:单独一行包含一个点(.)。

输出格式

程序向标准输出写入结果:

  • 一行,表示可能的最高分值

输入样例 1

prmgroa  
profile  
program  
prom  
rag  
ram  
rom  
.  

输出样例 1

24  

补充说明

  • 字母分值表(假设):
    • 例如:a=1, b=3, c=3, ..., z=10(具体分值需参考题目给出的图1)。
  • 计算方式
    • 检查每个单词是否可以由收集到的字母组成(字母计数匹配)。
    • 计算所有可能的单单词双单词组合的分值,取最大值。
  • 优化建议
    • 由于输入规模较大(字典最多 40,00040,000 个单词),建议使用高效算法(如哈希统计字母频率+暴力枚举可行组合)。
    • scanfcin 更快,适用于大规模数据读取。

示例解析

  • 输入字母p, r, m, g, r, o, a
  • 可行单词
    • program(假设分值 2424
    • prom(假设分值 1212
    • rag(假设分值 66
    • 其他单词可能因字母不足或分值较低被排除。
  • 最优解program(单单词,分值 2424)。