zoukankan      html  css  js  c++  java
  • 概率初始化hdu 2955 (01背包变形)

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

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

        目题粗心:劫匪抢银行,要求被抓概率小于P。共有n个银行,第i个银行钱数为m[i],被抓概率为p[i](float型);求劫匪最多能抢多少钱;

        思绪:由于值价(被抓概率)是浮点型且不能直接相加,所以不能以值价为背包。这个目题可以以取得的值价(即抢到的钱数)为背包,求抢到一定钱时逃跑的概率;虽然抢到的钱数不是连续化变的,但是通过初始化时的妙巧理处还是可以连续历遍的,体具见代码及注释;

        每日一道理
    翻开早已发黄的页张,试着寻找过去所留下的点点滴滴的足迹。多年前的好友似乎现在看来已变得陌生,匆忙之间,让这维持了多年的友谊变淡,找不出什么亲切感,只是偶尔遇上,淡淡地微笑,如今也只能在这发黄的页张中找寻过去的那些让人难忘的,至少我可以握住这仅剩下一段的“丝线头”……
    #include<stdio.h>
    #include<string.h>
    #define ans(a,b) ((a)>(b)?(a):(b))
    #define N 111
    int m[N];
    float p[N],f[11111];
    int main()
    {
        int T,n,i,j,sum,ans;
        float P;
        scanf("%d",&T);
        while(T--){
            sum=0,ans=0;
            scanf("%f%d",&P,&n);
            for(i=0;i<n;i++){
                scanf("%d%f",&m[i],&p[i]);
                sum+=m[i];
            }
            memset(f,0,sizeof(f));//初始化,特别意注f[0];
            f[0]=1;
    		//盘算抢j钱金时逃跑的概率
            for(i=0;i<n;i++){
                for(j=sum;j>=m[i];j--){//意注j的上限
                    f[j]=ans(f[j],f[j-m[i]]*(1-p[i]));
                }
            }
            for(j=0;j<=sum;j++){//对于j取不到的值恒有f[j]=0,why?想一想初始化
                if(P>(1-f[j])&&j>ans)
                    ans=j;
            }
            printf("%d\n",ans);
        }
        return 0;
    }

    文章结束给大家分享下程序员的一些笑话语录: 现在社会太数字化了,所以最好是有一个集很多功能于一身的设备!

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3063518.html
Copyright © 2011-2022 走看看