By zhongzijun \text{zhongzijun} zhongzijun
Description
给你一个长度为 n n n 的字符串,和一个正整数 m m m ,其中 m m m 能整除 n n n ,现有一算法就是把整个字符串分成 n m \dfrac{n}{m} mn 段,然后每一段按照一个相同的 1 1 1 ~ m m m 的排列方式进行重新排列,然后把这 n m \dfrac{n}{m} mn 段合并,算法把字符串中连续相同的字符合并成一个字符,得到一个新字符串。
请你求出新的字符串可能的最短长度。
1 ≤ m ≤ 16 , 1 ≤ n ≤ 5 ≤ 1 0 4 1 \leq m \leq 16,1 \leq n \leq 5 \leq 10^4 1≤m≤16,1≤n≤5≤104 。
时间限制为 4s ,空间限制为 65536 KB 。
Solution
发现 m m m 很小,考虑使用 状压 DP 来解题 。
设 f [ S ] [ i ] [ j ] f[S][i][j] f[S][i][j] 表示当前已经选的数的状态为 S S S ,排列中的第一个数是 i i i , 当前 已经选择的最后一个数是 j j j 的情况下的新字符串可能的最小长度。
但是我们发现这样会空超。
考虑删掉一维,于是我们得到了下面的定义:
设 f [ S ] [ i ] f[S][i] f