2955 ACM 杭电 抢银行 01背包 乘法
题意:
强盗抢银行,在不被抓住的情况下,想尽量多的偷点钱。已知各个银行的金钱和被抓的概率,以及强盗能容忍的最大不被抓的概率(小于等于该概率才能不被抓),求最多能抢到钱?
并不是简单的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;
}
}
}
}
2955 ACM 杭电 抢银行 01背包 乘法的更多相关文章
- 2602 ACM 杭电 骨头容器 01背包
题意:装骨头的容器大小固定,有一堆骨头,已知骨头的价值和大小,在不超过容积大小的情况下,问:所装骨头的最大价值? 思路:典型的01背包问题,不需要有任何的变动. 模板: for(int j=v;j&g ...
- 2159 ACM 杭电 杀怪 二维费用的背包+完全背包问题
题意:已知经验值,保留的忍耐度,怪的种数和最多的杀怪数.求进入下一级的最优方案. 思路:用二维费用的背包+完全背包问题 (顺序循环)方法求解 什么是二维费用的背包问题? 问题: 二维费用的背包问题是指 ...
- 杭店 ACM 1864 最大报销额 01背包
![勾选C++才能过 题意: 先规定可以报销一定额度的发票,物品类型有A,B,C,三种.要求每张发票总额不得超过1000元,单项物品不得超过600.求报销的最大额 分析: 先找到合格的发票,然后再挑选 ...
- 3466 ACM Proud Merchants 变形的01背包
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3466 题意:假设你有M元,已经Pi,Qi,Vi(i为角标,1<i<N),当M>Qi,时才 ...
- HDU 2955 Robberies(概率DP,01背包)题解
题意:给出规定的最高被抓概率m,银行数量n,然后给出每个银行被抓概率和钱,问你不超过m最多能拿多少钱 思路:一道好像能直接01背包的题,但是有些不同.按照以往的逻辑,dp[i]都是代表i代价能拿的最高 ...
- 5410 ACM 杭电 01+完全背包
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5410 虽然是英文题目:但还是很好理解的.明显的背包问题 思路:如果你能想到把题目拆分成小问题,就会简单许多 ...
- ACM 杭电HDU 2084 数塔 [解题报告]
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- 2554 ACM 杭电 数学
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2554 中文题目,题意易懂.但是本题涉及到很强的数学思维. 思路:看了题意后:我的第一反应是除了 n=1,n ...
- 1013 ACM 杭电 root
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1013 题意:求两个数的根 如: 12->3,99->9,80->8 注意题目没有限制数的 ...
随机推荐
- bzoj 2150
然后考虑正解 我们发现,最坏情况就是每个点都派驻军队,所以答案至多是“.”的数目 而且,每个点都至多只有一个入度和一个出度,所以我们可以将每个点拆成两个点,一个作为入点,一个作为出点,然后所有图上能到 ...
- shell 按序删除文件
一.按时间排序 cd /data/wosbak/hrs/pre/ && ls -A -t | awk '{if(NR>15){print $9}}' | xargs rm -rf ...
- AI-视图组件-五个接口的最终简化版
五个接口最终版 #url.py # 序列化最贱版本 url(r'^customer/$', views.CustomerView.as_view({"get":"list ...
- fio 测试磁盘性能
在磁盘测试中最关心的几个指标分别为: iops(每秒执行的IO次数).bw(带宽,每秒的吞吐量).lat(每次IO操作的延迟). 当每次IO操作的block较小时,如512bytes/4k/8k等,测 ...
- java & python猜数字游戏对比
1.java版 package day03; import java.util.Random;import java.util.Scanner; /** * 猜数字游戏 * 随机生成一个1-100之间 ...
- python中深拷贝与浅拷贝
# 1.浅拷贝(复制东西)a = [11,22,33] # 实际上是浅拷贝# 没有把这个变量的值赋进去,而是把另一个变量的地址拿过去了,就叫浅拷贝.b = a # print(id(a))# prin ...
- javascript获取时间戳
时间戳: 时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数.它也被称为 Unix 时间戳(Unix Timestamp). JavaScript 获取当前时间戳: < ...
- Json常用组件
Json2.js 开发者:json官网:http://www.json.org/. 适用环境:用于在不支持JSON对象的浏览器(通常是国内使用IE内核的第三方浏览器)下使用.json2.js提供了 ...
- nignx部署Vue单页面刷新路由404问题解决
官网说明: https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E8%AD%A6%E5%91%8A 在linux下搭建ngi ...
- JMeter中BeanShell Sampler调试分享
BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.p ...