http://acm.hdu.edu.cn/showproblem.php?pid=2955
#include<stdio.h>
#include<string.h>
struct ss
{
int mon;
double pro;
};
int main()
{
int i,j,n,sum,ncase;
ss arr[105];
double f[10005],p;
scanf("%d",&ncase);
while(ncase--)
{ sum=0;
scanf("%lf%d",&p,&n);
for(i=0;i<n;i++)
{
scanf("%d%lf",&arr[i].mon,&arr[i].pro);
sum+=arr[i].mon;
}
for(i=1;i<=sum;i++)
f[i]=-1;
f[0]=1;
int max=0;
for(i=0;i<n;i++)
{
for(j=sum;j>=arr[i].mon;j--)
{
if(f[j-arr[i].mon]!=-1)
{
if(f[j]<f[j-arr[i].mon]*(1-arr[i].pro))
f[j]=f[j-arr[i].mon]*(1-arr[i].pro);
}
if(f[j]>=1-p&&max<j) max=j;
}
}
printf("%d\n",max);
}
return 0;
}