Microsoft Question - MaxEmployeeAttendence (any repititions are allowed)
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> GetAllCombinations (int current_day, int repititions_left) {
if (repititions_left == 0) return {{}};
if (current_day < 0) return {};
vector<vector<int>> result;
vector<vector<int>> combinations_for_remaining_repitions;
combinations_for_remaining_repitions = GetAllCombinations (current_day-1, repititions_left-1);
for (auto each : combinations_for_remaining_repitions) {
each.push_back(current_day);
result.push_back(each);
}
combinations_for_remaining_repitions = GetAllCombinations (current_day-1, repititions_left);
for (auto each : combinations_for_remaining_repitions) result.push_back(each);
return result;
}
int MaxEmployeeAttendence (vector<vector<int>>& availability, int total_days, int repititions) {
int max_attendence = 0;
vector<vector<int>> all_possible_days_for_course = GetAllCombinations (total_days-1, repititions);
for (vector<int> selected_days : all_possible_days_for_course) {
unordered_set<int> selected_days_set;
for (auto i : selected_days) selected_days_set.insert (i);
int unique_employees = 0;
for (int employee = 0; employee < availability.size(); employee ++) {
for (int day : availability[employee]) {
if (selected_days_set.count(day) != 0) {
unique_employees ++;
break;
}
}
}
if (max_attendence < unique_employees) max_attendence = unique_employees;
}
return max_attendence;
}
int main() {
vector<vector<int>> availability = {
{0, 3, 9},
{4},
{1, 4},
{3, 2},
{3, 4},
{7}
};
cout << MaxEmployeeAttendence (availability, 10, 4) << endl;
return 0;
}
|
run
| edit
| history
| help
|
0
|
|
|