【题解】 hdu2955 Robberies
有抱负的罗伊·劫匪已经看过很多美国电影,他知道坏人通常会被抓住,经常是因为他们太贪心了。他决定在银行抢劫案中工作一段时间,然后退休后到一所大学从事一份舒适的工作。
题目:
罗伊去几个银行偷盗,他既想多投点钱,又想尽量不被抓到。已知各个银行的金钱数和被抓的概率,以及罗伊能容忍的最大被抓概率。求他最多能偷到多少钱?
思路:
背包问题
- 原先想的是把概率当做背包,在这个范围内最多能抢多少钱。
但是问题出在概率这里,一是因为概率是浮点数,用作背包必须扩大10^n倍来用。二是最大不被抓概率不是简单的累加。二是p = (1-p1)(1-p2)(1-p3) 其中p为最大不被抓概率,p1,p2,p3为各个银行被抓概率。
可行性上行不通
第二次想到把银行的钱当做背包,把概率当做价值,总容量为所有银行的总钱数,求不超过被抓
概率的情况下,最大的背包容量是多少dp[j] = max(dp[j],dp[j-Bag[i].v]*(1-Bag[i].p))(dp[j]表示在被抢概率j之下能抢的钱);代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct bag
{
int v;
double p;
}Bag[10010];
double dp[10010];
int main()
{
int T,N;
double p;
scanf("%d",&T);
while(T--)
{
scanf("%lf %d",&p,&N);
int sum = 0;
for(int i = 0; i < N; i++)
{
scanf("%d%lf",&Bag[i].v,&Bag[i].p);
sum += Bag[i].v;
}
memset(dp,0,sizeof(dp));
dp[0] = 1;
for(int i = 0; i < N; i++)
{
for(int j = sum; j >= Bag[i].v; j--)
{
dp[j] = max(dp[j],dp[j-Bag[i].v]*(1-Bag[i].p));
}
}
for(int i = sum; i >= 0; i--)
{
if(dp[i] > 1-p)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
【题解】 hdu2955 Robberies的更多相关文章
- HDU2955 Robberies[01背包]
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu2955 Robberies(背包)
https://vjudge.net/problem/HDU-2955 概率是浮点数,只能做值(而且这里是累乘,也不能化成整数),这里注意要化成安全概率(1-p[i]),求安全概率的最大值. 钱数作二 ...
- HDU-2955 Robberies 浮点数01背包 自变量和因变量位置互换
题目链接:https://cn.vjudge.net/problem/HDU-2955 题意 突然想找几个银行抢钱. 给出各银行的钱数和被抓的概率,以及能容忍的最大被抓概率. 问他最多能抢到多少钱? ...
- hdu2955 Robberies 01背包+概率
link:http://acm.hdu.edu.cn/showproblem.php?pid=2955 首先,这个题目的背包容量不能是概率.1.精度不清楚.2.把概率相加有什么意义呢?所以,转换一下, ...
- 01标题背包水章 HDU2955——Robberies
原来是dp[i],它代表的不被抓的概率i这最大的钱抢(可能1-100) 客是dp[i]表示抢了i钱最大的不被抓概率,嗯~,弱菜水题都刷不动. 那么状态转移方程就是 dp[i]=max(dp[i],dp ...
- hdu2955 Robberies (01背包)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=2955">http://acm.hdu.edu.cn/showproblem.php ...
- Robberies(HDU2955):01背包+概率转换问题(思维转换)
Robberies HDU2955 因为题目涉及求浮点数的计算:则不能从正面使用01背包求解... 为了能够使用01背包!从唯一的整数(抢到的钱下手)... 之后就是概率的问题: 题目只是给出被抓的 ...
- Robberies(简单的01背包 HDU2955)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 【hdu2955】 Robberies 01背包
标签:01背包 hdu2955 http://acm.hdu.edu.cn/showproblem.php?pid=2955 题意:盗贼抢银行,给出n个银行,每个银行有一定的资金和抢劫后被抓的概率,在 ...
随机推荐
- 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler
目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...
- SimpleDateFormat线程不安全的5种解决方案!
1.什么是线程不安全? 线程不安全也叫非线程安全,是指多线程执行中,程序的执行结果和预期的结果不符的情况就叫做线程不安全. 线程不安全的代码 SimpleDateFormat 就是一个典型的线程不 ...
- Redis6.x学习笔记(二)持久化之RDB
前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...
- 【Web前端HTML5&CSS3】06-盒模型
笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 盒模型 1. 文档流(normalflow) 2. 块元素 3. 行内元素 4. 盒子模型 盒模型.盒子模型.框 ...
- ES6学习-5 解构赋值(2)对象的解构赋值
啥也不说,先举个栗子: 1 let { myname, myage } = { myage: 18, myname: "郭郭" }; 2 console.log(myname) / ...
- [bug] Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MyS
sql语句写错了,如图,where前多了个逗号
- [bug] Importing maven project 卡在%9不动
参考 Importing maven project 卡在%9不动 https://blog.csdn.net/weixin_43197380/article/details/89220337
- Linux查看登录日志 last命令 查看当前登录用户
Linux查看登录日志 linux 发布于 31 分钟前 lastlog 打印系统账号最近一次的登录记录情况,解析的是/var/log/lastlog文件,它是一个data file类型的文件,文 ...
- Linux后台执行命令:&和nohup nohup和&后台运行,进程查看及终止
nohup和&后台运行,进程查看及终止 阅读目录 nohup和&后台运行,进程查看及终止 1.nohup 2.& 3.nohup和&的区别 &:是指在后台运 ...
- bug修复
bug严重级别 bug个数 bug修复率 上个版本的bug修复率 和arm对比 arm已修复