-
-
Notifications
You must be signed in to change notification settings - Fork 8.9k
/
Copy pathSolution.cpp
25 lines (24 loc) · 885 Bytes
/
Solution.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using ll = long long;
class Solution {
public:
long long minimumTotalDistance(vector<int>& robot, vector<vector<int>>& factory) {
sort(robot.begin(), robot.end());
sort(factory.begin(), factory.end());
vector<vector<ll>> f(robot.size(), vector<ll>(factory.size()));
function<ll(int i, int j)> dfs = [&](int i, int j) -> ll {
if (i == robot.size()) return 0;
if (j == factory.size()) return 1e15;
if (f[i][j]) return f[i][j];
ll ans = dfs(i, j + 1);
ll t = 0;
for (int k = 0; k < factory[j][1]; ++k) {
if (i + k >= robot.size()) break;
t += abs(robot[i + k] - factory[j][0]);
ans = min(ans, t + dfs(i + k + 1, j + 1));
}
f[i][j] = ans;
return ans;
};
return dfs(0, 0);
}
};