码迷,mamicode.com
首页 > 其他好文 > 详细

01背包

时间:2017-08-10 20:50:21      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:ber   max   银行   names   多少   超过   printf   http   分享   

 

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 }
View Code

 

01背包

标签:ber   max   银行   names   多少   超过   printf   http   分享   

原文地址:http://www.cnblogs.com/yijiull/p/7340948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!