0.04 (被抓住的概率p)  3(银行个数)

1(银行的钱) 0.02(人被抓住的概率)

2                   0.03

3                   0.05

求人在不被抓住的情况下抢劫的最大数目

const int N=101;
struct bank{
   int money;
   double p;  //逃跑的概率
}banks[N];
double dp[N*N]; //dp[i]:抢劫的钱为i成功逃跑的概率
int main(){
   int t,n,i,j,maxmoney;
   double p;
   cin>>t;
   while(t--){
    maxmoney=0;
    memset(dp,0.0,sizeof(dp));
    dp[0]=1.0;
    scanf("%lf %d",&p,&n);
    p=1.0-p; //人逃跑的概率
    for(i=1;i<=n;i++){
      scanf("%d %lf",&banks[i].money,&banks[i].p);
      banks[i].p=1.0-banks[i].p;  //各个银行逃跑的概率
      maxmoney+=banks[i].money; //总的钱
    }
   for(i=1;i<=n;i++)  //抢劫第i个银行 
    for(j=maxmoney;j>=banks[i].money;j--)  //
         dp[j]=max(dp[j-banks[i].money]*banks[i].p,dp[j]);//乘法原理

   for(i=maxmoney;;i--){
      if(dp[i]>p){  //能逃跑的最大钱数
         printf("%d\n",i);
         break;
      }
   }
   }
   return 0;
}