Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #define mp make_pair
- #define all(v) (v).begin(), (v).end()
- #define LEN(v) (int)(v).size()
- #define uni(v) { \
- sort(all(v)); \
- (v).erase(unique(all(v)), (v).end()); \
- }
- #define pp pop_back
- #define MEM(a, b); memset(a, b, sizeof(a))
- using namespace std;
- const int maxrooms = 101;
- const int maxteachersset = 16385;
- const int NOT_REACHED = 100000000;
- double res[maxrooms][maxteachersset];
- int rooms, teachers;
- int room[maxrooms], teacher[maxteachersset];
- double solve(int pos, int state){
- if(res[pos][state] == NOT_REACHED){
- for(int i = 0; i < teachers; i++){
- if(!(state & (1 << i))){
- double time = (double) room[pos] / teacher[i];
- int mask = (state | (1 << i));
- for(int j = pos; j < rooms and time < res[pos][state]; j++, time += (double)room[j] / teacher[i]){
- res[pos][state] = min(res[pos][state], max(time, solve(j + 1, mask)));
- }
- }
- }
- }
- return res[pos][state];
- }
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- cin >> rooms >> teachers;
- MEM(res, NOT_REACHED);
- for(int j = 0; j < (1 << teachers); j++){
- res[rooms][j] = 0;
- }
- for(int i = 0; i < rooms; i++){
- cin >> room[i];
- }
- for(int i = 0; i < teachers; i++){
- cin >> teacher[i];
- }
- cout << solve(0, 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement