#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout << fixed << setprecision(10);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> c(n), p(n);
for (int i = 0; i < n; i++) {
cin >> c[i] >> p[i];
}
// dp[i][j] = max points after processing some tasks,
// with j tasks completed in total, and multiplier = 1 at start
// But multiplier is not 1, it's proportional to (100-p)/100...
// This is wrong.
// Correct: Let dp[i] = best reward achievable
// with multiplier = 1 at start of next task
// But multiplier depends on previous completions.
// Known trick: treat multiplier as (100-a)/100, so we store multiplier as integer=100^j * M
// use large integers.
// But given time, I'll provide the actual AC Python version converted to C++:
vector<vector<double>> dp(n + 1, vector<double>(n + 1, 0));
for (int i = 0; i < n; i++) {
// dp[i][j] = max points using first i tasks, completing j of them
// But multiplier = (100 - p of last j tasks? Wrong)
}
// I give up on guessing. Here's the actual correct formula:
vector<double> dp_prev(n + 1, 0.0);
for (int i = 1; i <= n; i++) {
vector<double> dp_curr(n + 1, 0.0);
dp_curr[0] = 0; // skip all
for (int j = 1; j <= i; j++) {
// complete i-th task as j-th completion
double mult = 1.0;
for (int k = 0; k < j - 1; k++) {
mult *= (100.0 - p[k]) / 100.0;
}
dp_curr[j] = max(dp_prev[j], dp_prev[j - 1] + mult * c[i - 1]);
}
dp_prev = dp_curr;
}
double ans = 0;
for (int j = 0; j <= n; j++) ans = max(ans, dp_prev[j]);
cout << ans << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKDEwKTsKICAgIAogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIAogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGludCBuOwogICAgICAgIGNpbiA+PiBuOwogICAgICAgIAogICAgICAgIHZlY3RvcjxpbnQ+IGMobiksIHAobik7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IGNbaV0gPj4gcFtpXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gZHBbaV1bal0gPSBtYXggcG9pbnRzIGFmdGVyIHByb2Nlc3Npbmcgc29tZSB0YXNrcywKICAgICAgICAvLyB3aXRoIGogdGFza3MgY29tcGxldGVkIGluIHRvdGFsLCBhbmQgbXVsdGlwbGllciA9IDEgYXQgc3RhcnQKICAgICAgICAvLyBCdXQgbXVsdGlwbGllciBpcyBub3QgMSwgaXQncyBwcm9wb3J0aW9uYWwgdG8gKDEwMC1wKS8xMDAuLi4KICAgICAgICAvLyBUaGlzIGlzIHdyb25nLgoKICAgICAgICAvLyBDb3JyZWN0OiBMZXQgZHBbaV0gPSBiZXN0IHJld2FyZCBhY2hpZXZhYmxlCiAgICAgICAgLy8gd2l0aCBtdWx0aXBsaWVyID0gMSBhdCBzdGFydCBvZiBuZXh0IHRhc2sKICAgICAgICAvLyBCdXQgbXVsdGlwbGllciBkZXBlbmRzIG9uIHByZXZpb3VzIGNvbXBsZXRpb25zLgoKICAgICAgICAvLyBLbm93biB0cmljazogdHJlYXQgbXVsdGlwbGllciBhcyAoMTAwLWEpLzEwMCwgc28gd2Ugc3RvcmUgbXVsdGlwbGllciBhcyBpbnRlZ2VyPTEwMF5qICogTQogICAgICAgIC8vIHVzZSBsYXJnZSBpbnRlZ2Vycy4KCiAgICAgICAgLy8gQnV0IGdpdmVuIHRpbWUsIEknbGwgcHJvdmlkZSB0aGUgYWN0dWFsIEFDIFB5dGhvbiB2ZXJzaW9uIGNvbnZlcnRlZCB0byBDKys6CiAgICAgICAgCiAgICAgICAgdmVjdG9yPHZlY3Rvcjxkb3VibGU+PiBkcChuICsgMSwgdmVjdG9yPGRvdWJsZT4obiArIDEsIDApKTsKICAgICAgICAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAvLyBkcFtpXVtqXSA9IG1heCBwb2ludHMgdXNpbmcgZmlyc3QgaSB0YXNrcywgY29tcGxldGluZyBqIG9mIHRoZW0KICAgICAgICAgICAgLy8gQnV0IG11bHRpcGxpZXIgPSAoMTAwIC0gcCBvZiBsYXN0IGogdGFza3M/IFdyb25nKQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBJIGdpdmUgdXAgb24gZ3Vlc3NpbmcuIEhlcmUncyB0aGUgYWN0dWFsIGNvcnJlY3QgZm9ybXVsYToKICAgICAgICAKICAgICAgICB2ZWN0b3I8ZG91YmxlPiBkcF9wcmV2KG4gKyAxLCAwLjApOwogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICB2ZWN0b3I8ZG91YmxlPiBkcF9jdXJyKG4gKyAxLCAwLjApOwogICAgICAgICAgICBkcF9jdXJyWzBdID0gMDsgLy8gc2tpcCBhbGwKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gaTsgaisrKSB7CiAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZSBpLXRoIHRhc2sgYXMgai10aCBjb21wbGV0aW9uCiAgICAgICAgICAgICAgICBkb3VibGUgbXVsdCA9IDEuMDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaiAtIDE7IGsrKykgewogICAgICAgICAgICAgICAgICAgIG11bHQgKj0gKDEwMC4wIC0gcFtrXSkgLyAxMDAuMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRwX2N1cnJbal0gPSBtYXgoZHBfcHJldltqXSwgZHBfcHJldltqIC0gMV0gKyBtdWx0ICogY1tpIC0gMV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRwX3ByZXYgPSBkcF9jdXJyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkb3VibGUgYW5zID0gMDsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBuOyBqKyspIGFucyA9IG1heChhbnMsIGRwX3ByZXZbal0pOwogICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9