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 | } |