Skip to content

Commit 513b3f3

Browse files
authored
Create allocate-mailboxes.cpp
1 parent 49d3e8b commit 513b3f3

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

C++/allocate-mailboxes.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Time: O(m *n^2)
2+
// Space: O(n)
3+
4+
class Solution {
5+
public:
6+
int minDistance(vector<int>& houses, int k) {
7+
sort(begin(houses), end(houses));
8+
vector<int> prefix(houses.size() + 1);
9+
for (int i = 0; i < houses.size(); ++i) {
10+
prefix[i + 1] = prefix[i] + houses[i];
11+
}
12+
vector<int> dp(houses.size());
13+
for (int j = 0; j < houses.size(); ++j) {
14+
dp[j] = cost(prefix, 0, j);
15+
}
16+
for (int m = 1; m < k; ++m) {
17+
for (int j = houses.size() - 1; j >= 0; --j) {
18+
for (int i = m; i <= j; ++i) {
19+
dp[j] = min(dp[j], dp[i - 1] + cost(prefix, i, j));
20+
}
21+
}
22+
}
23+
return dp.back();
24+
}
25+
26+
private:
27+
int cost(const vector<int>& prefix, int i, int j) {
28+
return (prefix[j + 1] - prefix[(i + j + 1) / 2]) -
29+
(prefix[(i + j) / 2 + 1] - prefix[i]);
30+
}
31+
};

0 commit comments

Comments
 (0)