zoukankan      html  css  js  c++  java
  • Little Tiger vs. Deep Monkey(hdu4815)01背包

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

    题意:已知n个题以及每个题答对的得分,给出p概率

    小老虎vs小猴子答题;已知小猴子随机答题,请问老虎至少得多少分

    才可以保证有p概率不会

    样例中老虎和猴子得分的八种情况如下

    m-n表示老虎得分:猴子得分

     分母 2^n(所以把总的算出来当分母,分子就是这个分值有几种选法+之前的)

    猴子分数:该分数出现情况次数

     

     所以先01背包算出刚好组成k分数的方案数

    然后累加 得出老虎在k分数的情况下 猴子分数<=老虎分数的方案数

    该方案数就是分子;分母是2^n

    然后和p比较即可

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int n;
    double p;
    ll dp[40005];
    int s[45];
    int main()
    {
        int t,i;
        scanf("%d",&t);
        while(t--){
            scanf("%d%lf",&n,&p);
            ll grade=0;
            for(i=0;i<n;i++){
                scanf("%d",&s[i]);
                grade+=s[i];
            }
            memset(dp,0,sizeof(dp));
            dp[0]=1;
            for(i=0;i<n;i++){
                for(int j=grade;j>=s[i];j--){
                    dp[j]+=dp[j-s[i]];//组成j分的方案数
                }
            }
            //for(i=0;i<=grade;i++)cout<<dp[i]<<endl;
            ll cnt=0;
            ll sum=1LL<<n;   //  分数的总方案数;
            for(int i=0;i<=grade;i++){
                cnt+=dp[i];//老虎在i分数的情况下 猴子分数<=老虎分数的方案数
                if((cnt*1.0/sum)>=p){
                    printf("%d
    ",i);
                    break;
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    python:dataclass装饰器详
    python : tuple 相加,注意逗号
    python itertools chain()
    Python classmethod 修饰符
    ILMerge
    a标签点击后页面显示个false
    Visual Studio自动生成XML类和JSON类
    元组简单示例
    jQuery插件示例笔记
    jQuery中的Ajax全局事件
  • 原文地址:https://www.cnblogs.com/ydw--/p/11692628.html
Copyright © 2011-2022 走看看