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