DP方程:dp[j]=max(dp[j],dp[j-m[i]]*p[i]);
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
using namespace std;
double dp[10005];
int m[105];
double p[105];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
double P; int N;
scanf("%lf%d",&P,&N);
P=1.0-P;
memset(dp,0,sizeof(dp)); //初始化数据
dp[0]=1;
int sum=0;
for(int i=1;i<=N;++i)
{
scanf("%d%lf",&m[i],&p[i]);
p[i]=1-p[i];
sum+=m[i];
}
//DP
for(int i=1;i<=N;++i)
for(int j=sum;j>=m[i];--j)
dp[j]=max(dp[j-m[i]]*p[i],dp[j]);
for(int i=sum;i>=0;--i)
if(dp[i]>=P)
{
printf("%d/n",i);
break;
}
}
return 0;
}