#include <bits/stdc++.h>
using namespace std;
pair<int, int> p[50];
int a[50], b[50];
double dp[55][55][55];
int main() {
  int i;
  int n;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%d", &p[i].first);
  for (i = 0; i < n; i++) scanf("%d", &p[i].second);
  sort(p, p + n, greater<pair<int, int> >());
  for (i = 0; i < n; i++) a[i] = p[i].first, b[i] = p[i].second;
  int j, k;
  double l = 0, r = 2e6;
  while (abs(l - r) > 1e-9) {
    double m = (l + r) / 2;
    for (i = 0; i < n + 5; i++) {
      for (j = 0; j < n + 5; j++) {
        for (k = 0; k < n + 5; k++) dp[i][j][k] = 1e99;
      }
    }
    dp[0][1][0] = a[0] - m * b[0];
    for (i = 0; i < n - 1; i++) {
      for (j = 0; j <= i + 1; j++) {
        for (k = 0; k <= i; k++) {
          dp[i + 1][j + 1][i + 1] = min(dp[i + 1][j + 1][i + 1],
                                        dp[i][j][k] + a[i + 1] - m * b[i + 1]);
          if ((j > 0) && (a[i + 1] < a[k]))
            dp[i + 1][j - 1][k] = min(dp[i + 1][j - 1][k], dp[i][j][k]);
        }
      }
    }
    for (i = 0; i <= n; i++) {
      for (j = 0; j < n; j++) {
        if (dp[n - 1][i][j] < 1e-9) break;
      }
      if (j < n) break;
    }
    if (i <= n)
      r = m;
    else
      l = m;
  }
  printf("%d\n", (int)(ceil(l * 1000) + 1e-9));
  return 0;
}
