/*
hdu_2955 01背包
Time:18:00 Mar.10,2012
Author: Karen
*/
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
double max(double a,double b)
{
return a>b?a:b;
}
int main()
{
int t,n,m[110],i,j,total;
double pp,p[110],f[11000];
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%lf%d",&pp,&n);
total=0;
for(i=0;i<n;i++)
{
scanf("%d%lf",&m[i],&p[i]);
total+=m[i];
}
memset(f,0,sizeof(f));
f[0]=1;
for(i=0;i<n;i++)
for(j=total;j>=m[i];j--)//注意j>=m[i]
f[j]=max(f[j],f[j-m[i]]*(1-p[i]));
for(i=total;i>=0;i--)
if(f[i]>=1-pp)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
被抓住的对立事件为所有的银行都没有被抓到,所以用的是1-p[i] and 1-pp