#P2334. Simple prefix compression

    ID: 1335 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>字符串动态规划Northeastern Europe 2003Far-Eastern Subregion

Simple prefix compression

题目描述

许多数据库使用前缀压缩技术存储字符字段(特别是索引)。该技术通过以下方式压缩字符串序列 A1,,ANA_1, \dots, A_N

  • 对于相邻字符串 Ai=ai,1ai,2ai,pA_i = a_{i,1}a_{i,2}\dots a_{i,p}Ai+1=ai+1,1ai+1,2ai+1,qA_{i+1} = a_{i+1,1}a_{i+1,2}\dots a_{i+1,q},若存在 jmin(p,q)j \leq \min(p, q) 使得 ai,1=ai+1,1,,ai,j=ai+1,ja_{i,1} = a_{i+1,1}, \dots, a_{i,j} = a_{i+1,j},则将 Ai+1A_{i+1} 存储为 [j]ai+1,j+1ai+1,q[j]a_{i+1,j+1}\dots a_{i+1,q},其中 [j][j] 是一个编码为 jj 的单字符。
  • j=0j = 0(无公共前缀),则 Ai+1A_{i+1} 前添加一个零字节,此时总长度可能增加。

约束条件

  • 1N100001 \leq N \leq 100001length(Ai)2551 \leq \text{length}(A_i) \leq 255

输入格式

  • 第一行:整数 NN
  • 接下来 NN 行:字符串 A1ANA_1 \dots A_N

输出格式

  • 压缩后的最小总长度。

示例分析

输入数据 1

3
abc
atest
atext

输出数据 1

11

解释

  1. A1=abcA_1 = \text{abc}(长度 33);
  2. A2A_2A1A_1 的公共前缀长度为 11,压缩为 [1]test[1]\text{test}(长度 1+4=51 + 4 = 5);
  3. A3A_3A2A_2 的公共前缀长度为 33,压缩为 [3]xt[3]\text{xt}(长度 1+2=31 + 2 = 3);
  4. 总长度:3+5+3=113 + 5 + 3 = 11