其实也不难,只要搞清楚value和volume就可以了!!!
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int vo[1001];
double va[10001];
double dp[10001];
int main()
{
int i,j,k,n,m,t,l;
double p;
while(~scanf("%d",&t))
{
while(t--)
{
scanf("%lf %d",&p,&n);
int v=0;
for(i=1;i<=n;i++)
{
scanf("%d %lf",&vo[i],&va[i]);
v+=vo[i];
}
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=1;i<=n;i++)
{
for(j=v;j>=vo[i];j--)
{
dp[j]=max(dp[j],dp[j-vo[i]]*(1-va[i]));
}
}
for(i=v;i>=0;i--) //从大到小
{
if(dp[i]>(1-p))
{
printf("%d\n",i);
break;
}
}
}
}
return 0;
}