Robberies HDU - 2955
直接说题意吧。(什么网友bb了半天题都说不清楚)
给了 P 表示大于这个概率一定被抓住。则P表示被抓住的概率。N表示现在有的银行,pi表示被抓的概率嘛。
然后,就看数学了。肯定不能算被抓的概率啊。因为,如果你第一个就被抓了,后面的概率还用算吗,或则说,这样的计算不符合01
背包的特点,那么我们就想一下,作为一个背包的容量,应该是做加减法,而不是像概率那样做乘除啊。那么我们就用银行的价值作为
物体的体积,而概率(1-被抓的概率=逃跑的概率)作为物品的价值啊。为什么转化为逃跑的概率呢?因为正面肛不动啊!这样我们就得到了
价值从小到大的一系列背包啊,不过概率也是递减的(抢的银行越多,逃跑的概率越小啊),当我们找到第一个小于(1-P)也是就是他自己的极限逃跑概率时,在之间的价值中找个最大的就可以了
ac代码如下:
#include<cstdio>
#include<cstring>
#define max(a, b) (a)>(b)?(a):(b)
#define MAXN int(1e4)
double dp[MAXN + ], p[MAXN];
int w[MAXN];
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
memset(dp, , sizeof(dp));
double pp; int n, v=;
scanf("%lf%d", &pp, &n);
for (int i = ; i <= n; ++i)
{
scanf("%d%lf", &w[i], &p[i]);
v += w[i];
}
dp[] = ;
for (int i = ; i <= n; ++i)
for (int j = v; j >= w[i]; --j)
dp[j] = max(dp[j], dp[j - w[i]] * ( - p[i]));
int maxx = ;
for (int i = ; i <= v;++i)
if (dp[i]>=(-pp))
maxx = max(i, maxx);
printf("%d\n", maxx);
}
}
Robberies HDU - 2955的更多相关文章
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- Robberies(HDU 2955 DP01背包)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Robberies hdu 2955 01背包
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 1 . Robberies (hdu 2955)
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually g ...
- HDU 2955 Robberies 背包概率DP
A - Robberies Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- [HDU 2955]Robberies (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 题意是给你一个概率P,和N个银行 现在要去偷钱,在每个银行可以偷到m块钱,但是有p的概率被抓 问 ...
- HDU 2955 Robberies(DP)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2955 题目: Problem Description The aspiring Roy the Rob ...
- hdu 2955 Robberies (01背包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 思路:一开始看急了,以为概率是直接相加的,wa了无数发,这道题目给的是被抓的概率,我们应该先求出总的 ...
- HDU 2955 Robberies(0-1背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2955 题意:一个抢劫犯要去抢劫银行,给出了几家银行的资金和被抓概率,要求在被抓概率不大于给出的被抓概率的情况下, ...
随机推荐
- oracle创建用户、授权、导入、导出命令总结
1.创建用户 需要先用system用户登录数据库,因为system用户具有创建其他用户的权限. 语法[创建用户]: create user 用户名 identified by 口令[即密码]: 例子: ...
- 阿里CentOS 7 卸载mysql5.6
查看当前安装mysql情况 rpm -qa|grep -i mysql 执行 yum remove mysql rpm -e mysql-community-release-el7-5.noarch ...
- java中自己常犯的错误汇总
package debug; /** 1.定义一个公共的动物类,包含名字.年龄.颜色和吃饭东西方法 2.定义一个猫类,继承动物类,同时拥有玩游戏的本领 3.定义一个狗类,继承动物类,同时拥有看门的本领 ...
- c++类构造函数详解
//一. 构造函数是干什么的 /* 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg: Counter c1; 编译 ...
- hosts 文件
各系统平台hosts文件存放路径 路径如下: Windows系统: C:\Windows\System32\drivers\etc\hosts Linux系统:/etc/hosts ...
- debian+python3.5环境下安装paramiko模块:
debian+python3.5环境下安装paramiko模块: 1.确保安装了操作系统安装了libssl-dev,zlib1g-dev (redhat,centos下这两包包名为openssl-d ...
- Linux常用系统命令
致歉:各位看到此博客的朋友们 因为命令的数量挺多的很多命令也都很简单 我就总结了一下具体的命令和这个命令是做什么的,主要的使用方法是链接到http://man.linuxde.net/的网站的,请各 ...
- 二. Redis 安全性
由于Redis速度相当快,当一台服务器比较好的时候,一个外部用户可以在一秒钟内进行150K(15万)次的密码尝试,因此意味着你需要设置一个非常非常强大的密码来防止暴力破解. 1.设置密码 (1). 通 ...
- python ctypes 探究 ---- python 与 c 的交互
近几天使用 python 与 c/c++ 程序交互,网上有推荐swig但效果都不理想,所以琢磨琢磨了 python 的 ctypes 模块.同时,虽然网上有这方面的内容,但是感觉还是没说清楚.这里记录 ...
- Python之随机梯度下降
实现:# -*- coding: UTF-8 -*-""" 练习使用随机梯度下降算法"""import numpy as npimport ...