zoukankan      html  css  js  c++  java
  • hdu 2955 Robberies(背包DP)

    题意:

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

    他母亲希望他被抓的概率真不超过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
    ",ans);
        }
    
        return 0;
    }
  • 相关阅读:
    JBuilder链接sql server数据库
    各种数据库连接代码(java)
    各种数据库连接代码的测试类(java)
    简单数据查询语句
    Oracle卸载
    Java字符串转换
    静态类示例
    授权对象的检查
    BAPI
    clear、REFRESH、free区别
  • 原文地址:https://www.cnblogs.com/fish7/p/4229883.html
Copyright © 2011-2022 走看看