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

hdu 2955 Robberies(背包DP)

时间:2015-01-16 23:43:56      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

题意:

小偷去抢银行,他母亲很担心。

他母亲希望他被抓的概率真不超过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;
}

 

hdu 2955 Robberies(背包DP)

标签:

原文地址:http://www.cnblogs.com/fish7/p/4229883.html

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