blob: 40fab6e1e9839be8efedc9b5a6483516b659fc71 (
plain)
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
26
27
28
29
30
31
32
33
34
35
36
|
#include "leetcode.h"
#include <algorithm>
#include <vector>
class Solution {
public:
int minDifficulty(vector<int> &jobDifficulty, int d) {
int n = jobDifficulty.size();
if (n < d)
return -1;
vector<int> dp(n, 1000), dp2(n), stack;
for (int i = 0; i < d; ++i) {
stack.clear();
for (int j = i; j < n; j++) {
dp2[j] = j ? dp[j - 1] + jobDifficulty[j] : jobDifficulty[j];
while (stack.size() &&
jobDifficulty[stack.back()] <= jobDifficulty[j]) {
int k = stack.back();
stack.pop_back();
dp[j] = min(dp2[j], dp2[k] - jobDifficulty[k] + jobDifficulty[j]);
}
if (stack.size())
dp2[j] = min(dp2[j], dp2[stack.back()]);
stack.push_back(j);
}
swap(dp, dp2);
}
return dp[n - 1];
}
};
int main() {
Solution obj;
vector<int> jobDifficulty = {6, 5, 4, 3, 2, 1};
cout << obj.minDifficulty(jobDifficulty, 2);
}
|