POJ1018

来源:互联网 发布:js for each 编辑:程序博客网 时间:2024/05/17 00:52

题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1018

思路:贪心,Bw能取的范围是全部bw中的最小的到每个机器的bw最大值集合中的最小的一个,迭代bw的值,每次取最小的pri的和,求出b/p的最大值。

 

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. public class Main {
  5.     double bp = 0;
  6.     public Main() throws NumberFormatException, IOException {
  7.         BufferedReader read = new BufferedReader(new InputStreamReader(
  8.                 System.in));
  9.         int t = Integer.parseInt(read.readLine());
  10.         int num;
  11.         int[][] b;
  12.         int[][] p;
  13.         int[] n;
  14.         int bmin = Integer.MAX_VALUE;
  15.         int[] bmaxs;
  16.         int bmax;
  17.         String[] s;
  18.         int sum;
  19.         int temp;
  20.         for (int i = 0; i < t; i++) {
  21.             num = Integer.parseInt(read.readLine());
  22.             b = new int[num][];
  23.             p = new int[num][];
  24.             n = new int[num];
  25.             bmin = Integer.MAX_VALUE;
  26.             bmaxs = new int[num];
  27.             bmax = Integer.MAX_VALUE;
  28.             for (int j = 0; j < num; j++) {
  29.                 s = read.readLine().split(" ");
  30.                 n[j] = Integer.parseInt(s[0]);
  31.                 b[j] = new int[n[j]];
  32.                 p[j] = new int[n[j]];
  33.                 for (int k = 0; k < n[j]; k++) {
  34.                     b[j][k] = Integer.parseInt(s[k * 2 + 1]);
  35.                     if (b[j][k] > bmaxs[j]) {
  36.                         bmaxs[j] = b[j][k];
  37.                     }
  38.                     if (b[j][k] < bmin) {
  39.                         bmin = b[j][k];
  40.                     }
  41.                     p[j][k] = Integer.parseInt(s[k * 2 + 2]);
  42.                 }
  43.             }
  44.             for (int j = 0; j < num; j++) {
  45.                 if (bmaxs[j] < bmax) {
  46.                     bmax = bmaxs[j];
  47.                 }
  48.             }
  49.             bp = 0;
  50.             for (int j = bmin; j <= bmax; j++) {
  51.                 sum = 0;
  52.                 for (int k = 0; k < num; k++) {
  53.                     temp = Integer.MAX_VALUE;
  54.                     for (int h = 0; h < n[k]; h++) {
  55.                         if (b[k][h] >= j && p[k][h] < temp) {
  56.                             temp = p[k][h];
  57.                         }
  58.                     }
  59.                     sum += temp;
  60.                 }
  61.                 if ((double) j / sum > bp) {
  62.                     bp = (double) j / sum;
  63.                 }
  64.             }
  65.             System.out.printf("%.3f/n", bp);
  66.         }
  67.     }
  68.     public static void main(String[] args) throws NumberFormatException,
  69.             IOException {
  70.         new Main();
  71.     }
  72. }
原创粉丝点击