zoukankan      html  css  js  c++  java
  • HDU 2955 Robberies

    01背包问题。


    题意是说 你必须窃取银行,除此之外,你会被拘捕一定几率,再就是N银行。

    每个银行都有一定数额的钱。此外,还有会被抓住的概率。

    计算不能赶上偷钱。


    只是非常阴险一道题。说得是被抓的概率。


    你须要算逃跑的概率 然后 (1 - 逃跑的概率)= 被抓的概率。


    这道题不能用概率去算钱。要用钱来算概率。


    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #include<list>
    #include<set>
    #include<cmath>
    #define INF 0x7fffffff
    #define eps 1e-6
    #define LL long long
    using namespace std;
    int n;
    double m;
    double dp[10001];
    int money[101];
    double prob[101];
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%lf%d",&m,&n);
            int sum=0;
            m=1.0-m;
            for(int i=0; i<n; i++)
            {
                scanf("%d%lf",&money[i],&prob[i]);
                sum+=money[i];
            }
            memset(dp,0,sizeof(dp));
            dp[0]=1;
            for(int i=0; i<n; i++)
            {
                for(int j=sum; j>=money[i]; j--)
                    dp[j]=max(dp[j],dp[j-money[i]]*(1.0-prob[i]));
            }
            int ans=0;
            for(int i=sum; i>=0; i--)
                //printf("%.2f==
    ",dp[i]);
            {
                if(dp[i]>=m)
                {
                    ans=i;
                    break;
                }
            }
            printf("%d
    ",ans);
        }
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Codeforces 1000C Covered Points Count
    Array类型
    Object对象
    变量、作用域与内存
    window.onload 方法脚本
    页面的性能优化
    node属性
    JavaScript图片
    DOM节点
    canvas象棋 画图
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4711863.html
Copyright © 2011-2022 走看看