标签:
题意:
小偷去抢银行,他母亲很担心。
他母亲希望他被抓的概率真不超过P。小偷打算去抢N个银行,每个银行有两个值Mi、Pi,Mi:抢第i个银行所获得的财产 Pi:抢第i个银行被抓的概率
求最多能抢得多少财产。
思路:
由于概率不是整数,所以不能将其作为背包容量。继续观察,发现Mi是整数,调整思路可发现,可以将财产作为背包容量,求一定财产内的被抓的最小概率。这样只需要判断这个概率是否小于等于P即可。
代码:
double P; int N; int m[105]; double p[105]; double f[10005]; int main(){ int T; cin>>T; while(T--){ scanf("%lf",&P); P = 1-P; scanf("%d",&N); int tot = 0; rep(i,1,N){ scanf("%d%lf",&m[i],&p[i]); p[i] = 1-p[i]; tot += m[i]; } rep(i,1,N) rep(j,0,tot) f[j] = 0.0; f[0] = 1.0; rep(i,1,N){ rep2(j,tot,m[i]){ f[j] = max( f[j],f[j-m[i]]*p[i] ); } } int ans = 0; rep2(i,tot,0){ if(f[i]>=P){ ans = i; break; } } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/fish7/p/4229883.html