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

好久没登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 10010
int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值