Robberies
题意:小偷抢银行,问在被捕的概率不超过p的情况下最多抢多少钱。
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=10010; 4 double f[maxn]; //不被捕的概率 5 int v; 6 double p; 7 double x[maxn]; 8 int m[maxn]; 9 int main(){ 10 int t; 11 scanf("%d",&t); 12 while(t--){ 13 int n; 14 int ans=0; 15 memset(f,0,sizeof(f)); 16 f[0]=1; 17 scanf("%lf%d",&p,&n); 18 int sum=0; 19 for(int i=0;i<n;i++){ 20 scanf("%d%lf",&m[i],&x[i]); 21 sum+=m[i]; 22 } 23 for(int i=0;i<n;i++) 24 for(int j=sum;j>=m[i];j--){ 25 f[j]=max(f[j],f[j-m[i]]*(1-x[i])); 26 } 27 for(int i=sum;i>0;i--){ 28 if((1-f[i])<=p){ 29 ans=i; 30 break; 31 } 32 } 33 printf("%d ",ans); 34 } 35 }