某种字符串处理语言提供了一种将字符串分成两部分的原始操作。由于此操作涉及复制原始字符串,因此无论剪切的位置如何,长度为 n 的字符串都需要 n 个单位时间。现在假设你想把一个字符串分成很多块。休息的顺序会影响总运行时间。例如,如果你想在位置 3 和 10 剪切一个 20 个字符的字符串,那么在位置 3 进行第一次剪切会产生 20+17=37 的总成本,而首先执行位置 10 的成本会更好 20+ 10=30。
给出一个动态规划算法,给定长度为 n 的字符串中 m 个切割的位置,找到将字符串分成 m + 1 段的最小成本。
这个问题来自“算法”第6章6.9。
由于这个问题没有答案,这就是我的想法。
定义OPT(i,j,n)
为断开字符串的最小成本,i
对于开始索引,j
对于字符串的结束索引以及n
我可以使用的剩余剪切数。
这是我得到的:
OPT(i,j,n) = min {OPT(i,k,w) + OPT(k+1,j,n-w) + j-i} for i<=k<j and 0<=w<=n
是对还是错?请帮忙,谢谢!