Educational Codeforces Round 136
https://codeforces.com/contest/1739
F. Keyboard Design
n个字符串 si, 价值ci
包含的字符都是 ‘a’~’l’ (前12个), 保证每个字符串中相邻字符不同
求 价值最大的 字符串价值集合
满足:
可以制作一个'a'~'l'
出现且只出现一次的字符串t, 使得集合中
所有字符串si中相邻的字符,在t上也相邻
范围
n 1000
sum |si| 2000
ci [1,1e5]
4s
1024mb
我的思路
2000 这数字有点假, 因为既然是前12个, 真的有用的配对是 11+10+9+..+1 = 12 * 11/2 = 66个
但是 66 个去做bitmask就不现实了,
12个字符,有11个连接,所以这66个中最多同时11个, 更直接就是 12!=479001600, 但是太大了
12如果是bitmask, 但似乎表示不了什么意义, 即使连成链, 不只是两头有意义, 中间的连接方式也会影响
所以其实是 n = 1000
然后每个字符串提供一个 <= 11 的连接方案(66种候选), 如果超过11一定不可能
然后 选一个集合, 使得连接方案的并 依然<= 11, 且没有任何字符连了3个, 也不构成环
样例1
1 | 3 |
就可以变形成
1 | 3 |
一个想法是, 从排列来讲是12!, 上面看到是4e8, 但是如果仅仅说连接方式, 一个连接方式 对应两个排列, 所以还是有2e8
难道真的要 暴力搜索+剪枝吗??
这个ci, 1e5 到大不小的,算和的话能有1e8, 没啥想法
想钦定一个 si被选, 但这样的 感觉还没钦定连接好, 但钦定连接就是枚举