http://acm.hdu.edu.cn/showproblem.php?pid=2955
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; double q[105],dp[10005]; int m[105]; int main(void) { int t,n,i,j,sum; double p; scanf("%d",&t) ; while(t--) { scanf("%lf%d",&p,&n); sum=0; for(i=0;i<n;i++) { scanf("%d%lf",&m[i],&q[i]); sum+=m[i]; } memset(dp,0,sizeof(dp)); dp[0]=1.0 ; for(i=0;i<n;i++) for(j=sum;j>=m[i];j--) dp[j]=max(dp[j],dp[j-m[i]]*(1-q[i])); for(j=sum;j>=0;j--) if(dp[j]>=1-p) { printf("%d\n",j); break; } } return 0; }