标签:
// CODEFORCES 645E Intellectual Inquiry
http://codeforces.com/problemset/problem/645/E
字母表只有前面 k 个小写字母。给出一个字符串 s,你可以往 s 后添加 n 个字母,使得,总的字符串的不同子序列最多。
n k
s
1 ≤ n ≤ 1,000,000
1 ≤ k ≤ 26
1 ≤ |s| ≤ 1,000,000
输出答案模 1,000,000,007。
看了题解才会的。
f[i] 表示以 i 为结尾的子序列(不含空串)有多少个,往字符串后面加一个字母 c,则只有 f[c] 会改变。而且是改成 ∑f[] + 1。重点在这个值跟 c 是没有关系的,改变之后的所以子序列数目的和是 ∑f[] - f[c] + ∑f[] + 1,要使这个值最大,应该使得 f[c] 最小,也就是说,添加一个使得 f[c] 最小的 c 在字符串末尾是最佳的方案。
CODEFORCES 645E Intellectual Inquiry
标签:
原文地址:http://www.cnblogs.com/gu-castle/p/5535969.html