首页 > 代码库 > 01背包
01背包
Robberies
HDU - 2955
题意:小偷抢银行,问在被捕的概率不超过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\n",ans); 34 } 35 }
01背包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。