P5164: 编码-训练套题T5T3

传统题
1.000s 时间限制
128MB 内存限制
3 提交
3 解决

【题目描述】
3. 编码(compare.pas) 【问题描述】  我们准备根据一份文本编码表对一篇文本进行压缩。编码表的每一项包含两个部分:要编码的字符串和对应的编码。编码是二进制的01串,用来替代文本中相应的字符串以实现压缩编码的目的。这些01串不一定是等长的。文本压缩所要考虑的问题是对给定的文本和编码表,求出能令整个文本的编码最短的二进制串的长度。例如文本:abcdef    编码表
字符串 a abc abcd bcd def ef
编码 01 0 1011 1 10 11
下面有3种不同的方式进行编码: 方式1:长度为5
a bcd ef
01 1 11
方式2:长度为3
abc def
0 10
方式3:长度为6
abcd ef
1011 11
很明显,方式2长度最短,你的任务是找出编码后文本的最短长度,若不能进行编码,则输出0. 【输入文件】 输入可能包含多个文本压缩问题。   第一行是一个整数n,表示有n个文本压缩问题。(n<=10)   每个文本压缩问题的描述第一行是要压缩的文本(不超过210个字符),接下来是编码表,每项一行,不超过100项,只包含小写字母,外侧有小括号。 【输出文件】 对应每个文本压缩问题,每行输出一个最小长度 【样例输入】 2 abcdef (a,01) (abc,0) (abcd,1011) (bcd,1) (def,10) (ef,11) aa (a,1) (ab,10) 【样例输出】 3 2
【提示】

Dp:

   f[i]表示前i个字符编码的最小长度

 f[i]=min{f[k]+a[k+1..i]}   其中 a[k+1..i]表示从第K+1 到i的字符编码的长度, a[k+1..i]必须能被一次编码,

故需要预处理出以i结尾的所有编码。

题目类型~

模拟赛-训练套题 

咻咻~

提交答案 状态