给定字符串 L 和 N 的长度 - 回文数量,构建一个字符串,其中包含 N 回文子串。例如,
OrderedDict([('B', 85.68779888033738), ('S', 56.80461868495082)])
更新:所有目标回文的长度应为> 1
答案 0 :(得分:0)
您可以为字符串 S 中的每个字符引入变量 s_i = {0,1} ,然后如果子字符串 S [a..b> ] 是回文,它一定是那个
(s_a = s_b) and (s_{a+1} = s_{b-1}) and ...
因此,对于每个子字符串,您都有一个子句,并且必须满足 N 。这将问题简化为可满足性。
如果您能将其解决为优化问题,我也很好奇:
对于每个子字符串引入一个变量 x_i = {0, 1}
,代表子字符串数i
是回文的事实(让它为 S [a..b] 强>)。然后为该子字符串的子句引入变量 y_i :
(s_a-s_b)^2 + (s_{a+1}-s_{b-1})^2 + ...
然后您需要满足\sum_{x_i} = N
并最小化\sum_{x_i * y_i}
。如果存在解决方案并且目标始终是非负的,那么显然最小值 0 。
优化理念似乎是错误的,因为如果y_i = 0
需要强制执行,那么它必须是x_i = 0
,但是可满足性的提法应该有效