AC代码:
//枚举+贪心
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 105;
const int INF = 0xfffffff;
int b[MAX][MAX], p[MAX][MAX], num[MAX];
int main() {
int T;
cin >> T;//测试用例数
while (T--) {
int n, minband = INF, maxband = 0;
cin >> n;//设备种类
for (int i = 0; i < n; i++) {
cin >> num[i];//每种设备的数目
for (int j = 0; j < num[i]; j++) {
cin >> b[i][j] >> p[i][j];//带宽,价格
maxband = max(maxband, b[i][j]);//记录最大、最小带宽
minband = min(minband, b[i][j]);
}
}
double ans = 0;
for (int bw = minband; bw <= maxband; bw++) {//带宽bw,枚举
int sum = 0;
for (int i = 0; i < n; i++) {//设备i,遍历
int minp = INF;
for (int j = 0; j < num[i]; j++) {//厂家j
//取>=bw的带宽, 价格尽量小
if (b[i][j] >= bw && p[i][j] < minp) {
minp = p[i][j];
}
}
sum += minp;//每一个带宽,都有一个最优解
}
//取全局最优
if (bw / (sum * 1.0) > ans)
ans = bw / (sum * 1.0);
}
printf("%.3f\n", ans);
}
return 0;
}