1 /*
2 dp[ i ]:偷钱i而不被抓的最大概率(因为要使得被抓的概率最小)
3 开始想把dp[i]定义为概率为i的最大价值,因为把i放大了100,不过还是不够。
4 然后看题解才明白要转化,dp[i]:偷i这么多钱的最大不被捕的概率,也就是不被抓的最小概率
5 */
6 #include<stdio.h>
7 #include<string.h>
8 #include<algorithm>
9 using namespace std;
10 const int maxn = 10015;
11 double dp[ maxn ];
12 int vi[ maxn ];
13 double pi[ maxn ];
14
15 int main(){
16 int T;
17 scanf("%d",&T);
18 while( T-- ){
19 int n;
20 double V;
21 scanf("%lf%d",&V,&n);
22 int sum = 0;
23 for( int i=0;i<n;i++ ){
24 scanf("%d%lf",&vi[i],&pi[i]);
25 sum += vi[i];
26 }
27 memset( dp,0,sizeof( dp ) );
28 dp[ 0 ] = 1;
29 int res = 0;
30 for( int i=0;i<n;i++ ){
31 for( int j=sum;j>=vi[i];j-- ){
32 dp[ j ] = max( dp[ j ],dp[ j-vi[i] ]*( 1-pi[i] ) );
33 if( dp[j]>=(1-V) ) res = max( res,j );
34 }
35 }
36 printf("%d\n",res);
37 }
38 return 0;
39 }