【HDU 2955 概率dp or(背包)】

来源:互联网 发布:东华软件股份公司官网 编辑:程序博客网 时间:2024/06/16 16:29

好久没登CSDN了…感觉本科阶段最后一段时间用了吧…研究生打算换到简书试试…

说到读研其实整个人还是懵逼的…本来觉得没什么,但是前两天在图书馆看到前端的书,忽然又想起之前面试的时候…放弃offer这件事真的是感觉可惜得要满地打滚了。不知道会不会被网易爸爸拉黑…然而感觉研究生出来可能还是做前端(doge脸…)感觉读研出来应该找一个看上去高端一点的职位,比如架构师,数据分析啥啥的…但是秉承着干一行爱一行的原则…现在对前端有种……占了坑没填完的赶脚啊(艹皿艹 )!vue还没深入了解,react都还没有用啊ヾ(。`Д´。),flux和redux什么的!好歹让我知道下啊!转行也此生无憾啊!!!摔!

关键是现在我又过来填坑了…而且目测这一次填不完… 在萎靡的状态下报了CCF… 所以其实现在我是想把本科阶段的坑都填完?黑人问号脸……

所以先加油吧!!……

*************************************************************

于是离题很远…

这是一道简单的概率题,但是千万注意看题…!题意是说抢劫的几个银行被抓到的概率要小于额定值,所以不是直接把概率相加的,因为题目给的是每次抢劫可能被抓到的概率,所以多次抢劫累计起来的概率应该是 (1-p1)*(1-p2)...(1-pn)。最后把1-最终概率要小于额定值的最大得分找到就行

#include <cstdio>#include <iostream>#include <cstring>using namespace std;#define maxn 101#define maxm 10010int a[maxn];double b[maxn],dp[maxm];int main(){    int t;    cin>>t;    while(t--)    {        double tar;        int n,sum=0,ans=0;        cin>>tar>>n;        memset(dp,0,sizeof(dp));        for(int i=0;i<n;i++) {cin>>a[i]>>b[i];sum+=a[i];}        dp[0]=1;                for(int i=0;i<n;i++)        {            for(int j=sum;j>=a[i];j--)            {                dp[j]=max(dp[j],dp[j-a[i]]*(1-b[i]));            }        }        for(int i=sum;i>=0;i--)        {            if(dp[i])            {                if(1-dp[i]<tar) {ans=i;break;}            }        }        cout<<ans<<endl;    }    return 0;}


0 0
原创粉丝点击