hdu2955 Robberies (动态规划之背包)

http://acm.hdu.edu.cn/showproblem.php?pid=2955

题意:Roy想要抢劫银行,每家银行多有一定的金额和被抓到的概率,知道Roy被抓的最大概率P,求Roy在被抓的情况下,抢劫最多。

分析:被抓概率可以转换成安全概率,Roy的安全概率大于1-P时都是安全的。抢劫的金额为0时,肯定是安全的,所以d[0]=1;其他金额初始为最危险的所以概率全为0;
注意:不要误以为精度只有两位。
View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 double MAX(double x,double y)
 4 {
 5     return x>y?x:y;
 6 }
 7 double f[10005];
 8 int main()
 9 {
10     int t,n,i,j,k,a[110],V;
11     double p,price[110];
12     scanf("%d",&t);
13     while(t--)
14     {
15         scanf("%lf%d",&p,&n);
16         V=0;
17         for(i=1;i<=n;i++)
18         {
19             scanf("%d%lf",&a[i],&price[i]);
20             price[i]=1-price[i];
21             V+=a[i];
22         }
23         f[0]=1;
24         for(i=1;i<=V;i++)
25             f[i]=0;
26         
27         for(i=1;i<=n;i++)
28         {
29             for(j=V;j>=a[i];j--)
30             {
31                 f[j]=MAX(f[j],f[j-a[i]]*price[i]);
32             }
33         }
34         double min=1;
35         j=1;
36         p=1-p;
37         for(i=V;i>=0;i--)
38         {
39             if(f[i]-p>0.000000001)
40             {
41                 j=i;
42                     printf("%d\n",j);
43                     break;
44             }
45         }
46     
47     }
48     return 0;
49 }

 

posted @ 2013-04-27 11:12  zlyblog  阅读(191)  评论(0编辑  收藏  举报