题意
2018年10月,MIT建立了最新的纳米科技研究中心MIT.nano。此后,不断有新的研究成果在此产生。
有一天,研究者发现了一种新的生物,这种生物的基因中含有条DNA序列,每一条都有一定的长度,
科学家们可以将每条DNA序列切断,从而取出它的一个非空前缀。此后,他们可以将这些前缀按任意
顺序连结起来形成一条完整的DNA序列,这样的DNA序列对治疗癌症有很大的作用。
每条DNA序列都仅包含大写字母“A”,“C”,“G”,“T”。
科学家们很快发现,DNA序列的字典序越小,则治疗癌症的效果越好,他们想知道给定条DNA序列,
他们能获得的字典序最小的DNA序列是什么。
数据范围:
n
,
m
≤
50
n,m \le 50
n,m≤50
题解
直观的想法是按首字母分组,对于每组先选完首字母再选一个串的后面,但这样显然不对,因为后面可能比首字母更优。
于是考虑能否使得后面一定更劣:求出每个串a的最短前缀b,使得该前缀循环后小于原串,这样先选该前缀就一定更优。
又注意到如果知道顺序,那么直接从后往前贪心取即可,考虑将这些串排序:先按照b升序排,对于b相同的,要选出其中一个的a-b的前缀,使其字典序最小,于是按照b降序,若长度相同则长的放后,这样就留全了之后选择的机会。