#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stdlib.h>
#include <stdio.h>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
int b[111], p[111];
int dp[111][11111];
int t,maxb,n,m,minb;
int main(){
cin >> t;
while (t--) {
cin >> n;
ms(dp, -1);
for (int i = 0; i < n; i++) {
cin >> m;
for (int j = 0; j < m; j++) {
cin >> b[j] >> p[j];
maxb = max(b[j], maxb);
}
if (i == 0) {
for (int j = 0; j < m; j++) {
dp[0][b[j]] = p[j];
}
continue;
}
for (int k = 0; k <= maxb; k++) {
if (dp[i - 1][k] == -1) continue;
for (int j = 0; j < m; j++) {
int minb = min(k, b[j]);
if (dp[i][minb] == -1)
dp[i][minb] = dp[i - 1][k] + p[j];
else
dp[i][minb] = min(dp[i][minb], dp[i - 1][k] + p[j]);
}
}
}
double ans = 0;
for (int i = 0; i <= maxb; i++) {
ans = max(ans, (1.0*i) / (double)dp[n - 1][i]);
}
printf("%.3f\n", ans);
}
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交