做了两天的一道DP题。本来也是做不出的,幸好世界上有一种叫做大牛的恐怖生物。AndyZh和ZC果然强悍,在两年前就已经把这道题解决了。
贴个ZC的解题报告:
这题是一道最优化问题,此类问题一般使用搜索和动态规划,这题显然可以使用后者。
我们先来看看一个简单的例子: AAAAABBBBCCCCCDDDD,显然压缩后为
5(A)4(B)5(C)4(D)。
我们先不考虑这个串是如何压缩的,我们先考虑它是怎么组成的,显然它由4个部分组成,它们分别为“AAAAA”、“BBBB”、“CCCCC”、“DDDD”,然后再将这四个部分分解得到。
则我们可以这样来动态规划: 我们先考虑将这个字符串分解,然后逐步将各个部分压缩后再组合得到最终的压缩串。 这个题目可以用经典的邮局问题的模型来解决:
Opt [ I , j ] = min ( Opt [ I , k ] + Value [ I + k , j - k ] ) , Opt [ I , j ] 表示从第I个字符开始取J个字符,分解成所得到的最小长度。
Value [ I+k , j-k ]表示S[i+k..i+j]折叠后的最小长度。
可是有这样一类串: AAAABCBCBCAAAABCBCBCAAAABCBCBC, 我们将它们折叠以后,可以得到: 3(AAAABCBCBC), 但很明显 AAAABCBCBC还可以继续折叠,成为3(4(A)3(BC))
所以在这里,我们处理Value [ I , j ]这个函数的时候,就要利用一下以前DP出的结果。
假如 S [ I,J ] 最多能够折叠P次,则
Value [ I , j ] = Opt [ I , J Div P ] + Trunc ( Ln(P) / Ln(10) ) + 2 ( Trunc ( Ln(P) / Ln(10) ) + 2表示括号和P这些字符的长度)
贴个ZC的解题报告:
这题是一道最优化问题,此类问题一般使用搜索和动态规划,这题显然可以使用后者。
我们先来看看一个简单的例子: AAAAABBBBCCCCCDDDD,显然压缩后为
5(A)4(B)5(C)4(D)。
我们先不考虑这个串是如何压缩的,我们先考虑它是怎么组成的,显然它由4个部分组成,它们分别为“AAAAA”、“BBBB”、“CCCCC”、“DDDD”,然后再将这四个部分分解得到。
则我们可以这样来动态规划: 我们先考虑将这个字符串分解,然后逐步将各个部分压缩后再组合得到最终的压缩串。 这个题目可以用经典的邮局问题的模型来解决:
Opt [ I , j ] = min ( Opt [ I , k ] + Value [ I + k , j - k ] ) , Opt [ I , j ] 表示从第I个字符开始取J个字符,分解成所得到的最小长度。
Value [ I+k , j-k ]表示S[i+k..i+j]折叠后的最小长度。
可是有这样一类串: AAAABCBCBCAAAABCBCBCAAAABCBCBC, 我们将它们折叠以后,可以得到: 3(AAAABCBCBC), 但很明显 AAAABCBCBC还可以继续折叠,成为3(4(A)3(BC))
所以在这里,我们处理Value [ I , j ]这个函数的时候,就要利用一下以前DP出的结果。
假如 S [ I,J ] 最多能够折叠P次,则
Value [ I , j ] = Opt [ I , J Div P ] + Trunc ( Ln(P) / Ln(10) ) + 2 ( Trunc ( Ln(P) / Ln(10) ) + 2表示括号和P这些字符的长度)





































































































































































































