首页 > 代码库 > The Painter's Partition Problem Part I
The Painter's Partition Problem Part I
You have to paint N boards of lenght {A0, A1, A2 ... AN-1}. There are K painters available and you are also given how much time a painter takes to paint 1 unit of board. You have to get this job done as soon as possible under the constraints that any painter will only paint continues sections of board, say board {2, 3, 4} or only board {1} or nothing but not board {2, 4, 5}.
We define M[n, k] as the optimum cost of a partition arrangement with n total blocks from the first block and k patitions, so
n n-1
M[n, k] = min { max { M[j, k-1], ∑ Ai } } j=1 i=j
The base cases are:
M[1, k] = A0 n-1M[n, 1] = Σ Ai
i=0
Therefore, the brute force solution is:
int sum(int A[], int from, int to){ int total = 0; for (int i = from; i <= to; i++) total += A[i]; return total;}int partition(int A[], int n, int k){ if (n <= 0 || k <= 0) return -1; if (n == 1) return A[0]; if (k == 1) return sum(A, 0, n-1); int best = INT_MAX; for (int j = 1; j <= n; j++) best = min(best, max(partition(A, j, k-1), sum(A, j, n-1))); return best;}
The Painter's Partition Problem Part I
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。