【hdu2955】 Robberies 01背包
标签:01背包
hdu2955 http://acm.hdu.edu.cn/showproblem.php?pid=2955
题意:盗贼抢银行,给出n个银行,每个银行有一定的资金和抢劫后被抓的概率,在给定一个概率P,表示盗贼愿意冒险抢劫所能承受的最大被抓概率。
思路:首先用1减去被抓概率,得到安全概率。那抢劫了多家银行后的安全概率就是这些银行各自的安全概率连乘起来。其实是01背包的变种,
dp[j] 表示获得金额 j 时的安全概率。这里用滚动数组,得方程 dp[j] = max(dp[j], dp[i-a[i]]*(1-b[i]) 其中a表示银行金额,b表示被抓概率。
trick:概率的精度不总是2
自WA点: 滚动数组的 j 要逆序遍历。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <utility>
#include <queue>
#include <stack>
#define N 105
#define REP(i,n) for(i=0;(i)<(n);i++)
using namespace std;
const int INF=<<;
const double eps=1e-; double dp[N*N],b[N];
int n,a[N]; void run()
{
int _;
scanf("%d",&_);
while(_--)
{
int sum=,i,j;
double p;
memset(dp,,sizeof(dp));
cin>>p>>n;
REP(i,n)
{
cin>>a[i]>>b[i];
sum+=a[i];
}
dp[]=1.0;
REP(i,n)
for(j=sum;j>=a[i];j--)
{
dp[j]=max(dp[j],dp[j-a[i]]*(1.0-b[i]));
}
for(i=sum;i>=;i--)
if(dp[i]>=1.0-p)
{
cout<<i<<endl;
break;
}
}
} int main()
{
// freopen("case.txt","r",stdin);
run();
return ;
}
【hdu2955】 Robberies 01背包的更多相关文章
- HDU2955 Robberies[01背包]
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Robberies(HDU2955):01背包+概率转换问题(思维转换)
Robberies HDU2955 因为题目涉及求浮点数的计算:则不能从正面使用01背包求解... 为了能够使用01背包!从唯一的整数(抢到的钱下手)... 之后就是概率的问题: 题目只是给出被抓的 ...
- hdu 2955 Robberies 0-1背包/概率初始化
/*Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 2955 Robberies(01背包变形)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 2955 Robberies (01背包好题)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 2955 Robberies (01背包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 思路:一开始看急了,以为概率是直接相加的,wa了无数发,这道题目给的是被抓的概率,我们应该先求出总的 ...
- HDU——2955 Robberies (0-1背包)
题意:有N个银行,每抢一个银行,可以获得\(v_i\)的前,但是会有\(p_i\)的概率被抓.现在要把被抓概率控制在\(P\)之下,求最多能抢到多少钱. 分析:0-1背包的变形,把重量变成了概率,因为 ...
- HDU 2955 Robberies --01背包变形
这题有些巧妙,看了别人的题解才知道做的. 因为按常规思路的话,背包容量为浮点数,,不好存储,且不能直接相加,所以换一种思路,将背包容量与价值互换,即令各银行总值为背包容量,逃跑概率(1-P)为价值,即 ...
- HDU 2955 Robberies(01背包)
Robberies Problem Description The aspiring Roy the Robber has seen a lot of American movies, and kno ...
随机推荐
- python 基础 7.1 datetime 获得时间
一 datatime 的使用 object timedeta tzinfo time data dat ...
- nvl()与regexp_replace()
NVL(字段,0):将空值转化为0 regexp_replace(字段, ‘[1-9]‘ ,'') is not null; 将数字转化为0
- Nginx报出504 Gateway Timeout错误2
昨天,一个程序需要导出500条数据,结果发现到150条是,Nginx报出504 Gateway Timeout错误 经观察,发现大约30秒时超时,php.ini中执行时间配置已经是300秒: 复制代码 ...
- 关于button的自动刷新
今天在开发中遇到了ajax传数据到后台,处理结果正常,返回的resultMap是一个Map<String,Object>类型,但是返回时显示'Fail to load response d ...
- PAT 天梯赛 L2-028. 秀恩爱分得快 【数据处理】
题目链接 https://www.patest.cn/contests/gplt/L2-028 思路 0.只处理被询问的情侣的亲密度,否则会超时 1.要注意输入数字要用字符串,还要标记性别 因为 输出 ...
- (C)结构数组
结构数组 对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS]; 这两个数组大小相同,因此 可以用另一 ...
- BZOJ 3671 NOI2014 随机数生成器
这题其实是个暴力. 首先那一堆如何构造n*m方格的东西都是在玩你. 构造出来方阵后,由于是一个排列,不存在重复,可以大力贪心. 每次将选出一个最小的元素,然后将它右上左下的元素全部打上标记(记得bre ...
- office 2010 激活工具 迷你KMS使用说明
“迷你KMS”——“”体态轻盈仅只1MB.但却一身承担两大职能:KMS服务器和客户激活端.“迷你KMS”可激活Microsoft Office 2010系列三大版本,以及Windows 7企业.专业版 ...
- 算法(Algorithms)第4版 练习 1.3.219
方法实现: //1.3.19 /** * remove the last node in the linked list whose first node is first * * @return r ...
- JavaScript中函数的无限次运算问题
开博客有一段时间了,一直没动笔,原因是确实没看到什么值得写的内容.直到今天在司徒正美的博客里看到一个问题. http://www.cnblogs.com/rubylouvre/archive/2012 ...