我曾经遇到过类似的问题,但至今仍没有好的解决方法。这个问题是这样的:
给你一个长度为n(n<=1000)的正整数数组和一个正整数k(k<=n),k表示需要将该数组分割成k个连续子数组。你需要输出最小的m,其中m=max{s[1],...,s[k]},s[i]表示第i个子数组的和。数组中的所有整数都在1到100之间。例如:
Input: Output:
5 3 >> n = 5 k = 3 3
2 1 1 2 3
将数组分成2+1 | 1+2 | 3可以最小化m。
我的暴力想法是让第一个子数组在位置i结束(对于所有可能的i),然后尝试以最佳方式将其余的数组分成k-1个子数组。然而,这是指数级的解决方案,永远不会奏效。
因此,我正在寻找好的解决方法。如果您有,请告诉我。
感谢您的帮助。