View difference between Paste ID: DrfRdyug and PdEvgv6J
SHOW: | | - or go back to the newest paste.
1
#include <bits/stdc++.h>
2
3
#define pb push_back
4
#define mp make_pair
5
6
#define all(v) (v).begin(), (v).end()
7
#define LEN(v) (int)(v).size()
8
9
#define uni(v) {                                           \
10
    sort(all(v));                                          \
11
    (v).erase(unique(all(v)), (v).end());                  \
12
}
13
14
#define pp pop_back
15
#define MEM(a, b); memset(a, b, sizeof(a))
16
17
using namespace std;
18
const int maxrooms = 101;
19
const int maxteachersset = 16385;
20
const int NOT_REACHED = 100000000;
21
22
double res[maxrooms][maxteachersset];
23
int rooms, teachers;
24
int room[maxrooms], teacher[maxteachersset];
25
  
26
double solve(int pos, int state){
27
    if(res[pos][state] == NOT_REACHED){
28
        for(int i = 0; i < teachers; i++){
29
            if(!(state & (1 << i))){
30
                double time = (double) room[pos] / teacher[i];
31
		int mask = (state | (1 << i));
32
                for(int j = pos; j < rooms and time < res[pos][state]; j++, time += (double)room[j] / teacher[i]){
33
                    res[pos][state] = min(res[pos][state], max(time, solve(j + 1, mask)));
34
                }
35
            }
36
        }
37
    }
38
    return res[pos][state];
39
}
40
  
41
int main() {
42
    ios::sync_with_stdio(false);
43
    cin.tie(0); cout.tie(0);
44
45
    cin >> rooms >> teachers;
46
    MEM(res, NOT_REACHED);
47
    for(int j = 0; j < (1 << teachers); j++){
48
        res[rooms][j] = 0;
49
    }
50
    for(int i = 0; i < rooms; i++){
51
        cin >> room[i];
52
    }
53
    for(int i = 0; i < teachers; i++){
54
        cin >> teacher[i];
55
    }
56
    cout << solve(0, 0);
57
    return 0;
58
}