题意:
强盗抢银行,在不被抓住的情况下,想尽量多的偷点钱。已知各个银行的金钱和被抓的概率,以及强盗能容忍的最大不被抓的概率(小于等于该概率才能不被抓),求最多能抢到钱?

并不是简单的01背包问题?
1.概率是浮点数
2.最大不被抓的概率不是简单相加,由概率论可知,要抢的几家银行同时不被抓,要相乘。P=(1-P1)(1-P2)(1-P3) (P为最大不被抓的概率,P1 P2 P3为各个银行被抓的概率)

难点:
通常的01背包模板:
for(int j=v;j>=a[i].w;j–)//v是容积(拥有的总资金.)
{
dp[j]=max(dp[j],dp[j-a[i].w]+a[i].val);
}
如何和01背包联系起来。可以这么思考:钱作为v 然后dp数组里存逃跑的概率。

for(int j=total_val;j>=val[i];j--)//total_val是总钱数
{
dp[j]=max(dp[j],dp[j-val[i]]*(1-prob[i]));
}

状态转移方程:

dp[j]=max(dp[j],dp[j-val[i])(1-prob[i])); …….dp[i]表示当抢到i元钱 时,不被抓的最小概率值。*

最后输出前遍历dp,从钱数大到小遍历,一旦满足概率:dp[i] > (1 - P),输出值,跳出循环。

#include<stdio.h>
#include<string.h> #define max(a,b) (a>b)?a:b
#define NN 50005 int main()
{
int T,N,val[NN];
double P,dp[NN],prob[NN];
scanf("%d",&T);
while(T--)
{
scanf("%lf%d",&P,&N);
int total_val=0;
for(int i=0;i<N;i++)
{
scanf("%d%lf",&val[i],&prob[i]);
total_val+=val[i];
}
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int i=0;i<N;i++)
for(int j=total_val;j>=val[i];j--)
{
dp[j]=max(dp[j],dp[j-val[i]]*(1-prob[i]));
} for(int i = total_val; i >= 0; i --)
{
if(dp[i] > (1 - P))
{
printf("%d\n", i);
break;
}
}
}
}

](https://img-blog.csdn.net/2018080611055363?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjEwMDQ3Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

2955 ACM 杭电 抢银行 01背包 乘法的更多相关文章

  1. 2602 ACM 杭电 骨头容器 01背包

    题意:装骨头的容器大小固定,有一堆骨头,已知骨头的价值和大小,在不超过容积大小的情况下,问:所装骨头的最大价值? 思路:典型的01背包问题,不需要有任何的变动. 模板: for(int j=v;j&g ...

  2. 2159 ACM 杭电 杀怪 二维费用的背包+完全背包问题

    题意:已知经验值,保留的忍耐度,怪的种数和最多的杀怪数.求进入下一级的最优方案. 思路:用二维费用的背包+完全背包问题 (顺序循环)方法求解 什么是二维费用的背包问题? 问题: 二维费用的背包问题是指 ...

  3. 杭店 ACM 1864 最大报销额 01背包

    ![勾选C++才能过 题意: 先规定可以报销一定额度的发票,物品类型有A,B,C,三种.要求每张发票总额不得超过1000元,单项物品不得超过600.求报销的最大额 分析: 先找到合格的发票,然后再挑选 ...

  4. 3466 ACM Proud Merchants 变形的01背包

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3466 题意:假设你有M元,已经Pi,Qi,Vi(i为角标,1<i<N),当M>Qi,时才 ...

  5. HDU 2955 Robberies(概率DP,01背包)题解

    题意:给出规定的最高被抓概率m,银行数量n,然后给出每个银行被抓概率和钱,问你不超过m最多能拿多少钱 思路:一道好像能直接01背包的题,但是有些不同.按照以往的逻辑,dp[i]都是代表i代价能拿的最高 ...

  6. 5410 ACM 杭电 01+完全背包

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5410 虽然是英文题目:但还是很好理解的.明显的背包问题 思路:如果你能想到把题目拆分成小问题,就会简单许多 ...

  7. ACM 杭电HDU 2084 数塔 [解题报告]

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. 2554 ACM 杭电 数学

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2554 中文题目,题意易懂.但是本题涉及到很强的数学思维. 思路:看了题意后:我的第一反应是除了 n=1,n ...

  9. 1013 ACM 杭电 root

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1013 题意:求两个数的根 如: 12->3,99->9,80->8 注意题目没有限制数的 ...

随机推荐

  1. jenkins默认会存放目录

    jenkins默认会存放在用户主目录下的.jenkins文件夹中 如:Linux root用户:/root/.jenkins 注意:这是linux版本的.windows系统请自行更改.这个值在Jenk ...

  2. Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)

    pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  3. servlet设置cookie

    Cookie cookie =new Cookie("user","黄花菜");//实例化一个Cookie对象 cookie.setMaxAge(7*24*60 ...

  4. QQ登录用到的URL

    //QQ 登陆页面的URL,client_id就是APP ID,会返回一个codehttps://graph.qq.com/oauth2.0/authorize?response_type=code& ...

  5. Angularjs 学习笔记-2017-02-06-双向数据绑定

    NG: ng-bind:  标签属性 ng-bind=" obj.xxx  " ,不会出现 用于区别{{ }} 标签,当页面未加载完毕时可以看到{{}}标签,非常不雅观,ng-bi ...

  6. 【CF526F】Pudding Monsters

    题意: 给你一个排列pi,问你有对少个区间的值域段是连续的. n≤3e5 题解: bzoj3745

  7. ionic2+中修改minSdkVersion的方法

    具体方法很简单,直接在config.xml中找到下面这一行 <preference name="android-minSdkVersion" value="17&q ...

  8. python各个包的用途

    python中的多个包的用途 1.Numpy Numpy提供了两种基本的对象:ndarray和ufunc.ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数. N维数组 ...

  9. html5的audio实现高仿微信语音播放效果(实际项目)

    HTML部分: <div class="tab-pane fade dialog-record" id="dialogRecord"> <vo ...

  10. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...