题目链接:点击打开链接
看的别人的思路写的。。。点击打开链接
#include <iostream>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
int m[maxn];
int main()
{
int t,i,j,n,sum;
double p0,p[maxn],dp[maxn];
cin>>t;
while(t--)
{
sum=0;
cin>>p0>>n;
for(i=1;i<=n;i++)
{
cin>>m[i]>>p[i];
sum+=m[i];
}
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=1;i<=n;i++)
for(j=sum;j>=m[i];j--)
dp[j]=max(dp[j],dp[j-m[i]]*(1-p[i]));
for(i=sum;i>=0;i--)
if(dp[i]>1-p0)
{
cout<<i<<endl;
break;
}
}
return 0;
}