11. Maximum Profit in Job Scheduling{IMP}
Last updated
Last updated
Input: startTime = [1,2,3,3], endTime = [3,4,5,6], profit = [50,10,40,70]
Output: 120
Explanation: The subset chosen is the first and fourth job.
Time range [1-3]+[3-6] , we get profit of 120 = 50 + 70.Input: startTime = [1,2,3,4,6], endTime = [3,5,10,6,9], profit = [20,20,100,70,60]
Output: 150
Explanation: The subset chosen is the first, fourth and fifth job.
Profit obtained 150 = 20 + 70 + 60.Input: startTime = [1,1,1], endTime = [2,3,4], profit = [5,6,4]
Output: 6class Solution
{
public:
int jobScheduling(vector<int> &startTime, vector<int> &endTime, vector<int> &profit)
{
int n = startTime.size();
vector<pair<int, pair<int, int>>> v;
vector<int> dp;
for (int i = 0; i < n; i++)
{
v.push_back({startTime[i], {endTime[i], profit[i]}});
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
dp.push_back(v[i].second.second);
}
int j = 1;
while (j < n)
{
int i = 0;
int st = v[j].first;
int et = v[j].second.first;
for (int i = 0; i < j; i++)
{
if (st < v[i].second.first)
{
continue;
}
else
{
dp[j] = max(dp[j], dp[i] + v[j].second.second);
}
}
j++;
}
int maxProfit = INT_MIN;
for (int i = 0; i < dp.size(); i++)
{
if (dp[i] > maxProfit)
{
maxProfit = dp[i];
}
}
return maxProfit;
}
};class Solution
{
public:
static bool comparator(vector<int> &a, vector<int> &b)
{
return a[0] > b[0];
}
int jobScheduling(vector<int> &startTime, vector<int> &endTime, vector<int> &profit)
{
vector<vector<int>> v;
map<int, int> dp;
for (int i = 0; i < startTime.size(); i++)
{
v.push_back({startTime[i], endTime[i], profit[i]});
}
sort(v.begin(), v.end(), comparator);
int maxProfit = 0;
for (int i = 0; i < v.size(); i++)
{
int p = v[i][2];
auto itr = dp.lower_bound(v[i][1]);
int prevP = (itr != dp.end()) ? itr->second : 0;
maxProfit = max(maxProfit, p + prevP);
dp[v[i][0]] = maxProfit;
}
return maxProfit;
}
};