Robberies HDU
来源:互联网 发布:会计特点 知乎 编辑:程序博客网 时间:2024/06/05 20:05
题目传送门
题意:有一个小偷,和N家银行小偷如果被抓到的概率大于P以后就会被抓,每一家银行都有一个小偷能偷盗的金额和他被抓住的概率,问这个小偷在不被抓住的前提下能偷盗的最多的钱。
思路:01背包的变形,还是比较简单的,我们可以把能偷盗的钱的金额当作背包的容量,而不被抓到的概率当中价值然后直接01背包就好了。
#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <fstream>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <sstream>#include <stack>#include <string>#include <vector>#define MAXN 20100#define MAXE 5#define INF 1000000000#define MOD 1000000007#define LL long long#define pi acos(-1.0)using namespace std;int w[MAXN];double v[MAXN];double dp[MAXN];int main() { std::ios::sync_with_stdio(false); int T; cin >> T; for (int kase = 1; kase <= T; ++kase) { double p, n; cin >> p >> n; p = 1 - p; int sum = 0; for (int i = 1; i <= n; ++i) { cin >> w[i] >> v[i]; v[i] = 1 - v[i]; sum += w[i]; } memset(dp, 0, sizeof(dp)); dp[0] = 1; for (int i = 1; i <= n; ++i) { for (int j = sum; j >= w[i]; --j) { if (dp[j - w[i]] * v[i] - p >= -1e-8) { dp[j] = max(dp[j - w[i]] * v[i], dp[j]); } } } for (int i = sum; i >= 0; --i) { if (dp[i] - p >= -1e-8) { cout << i << endl; break; } } } return 0;}
阅读全文
0 0
- HDU Robberies
- hdu Robberies
- 【hdu】【Robberies】
- HDU Robberies
- Robberies HDU
- Robberies HDU
- Robberies HDU
- Robberies(HDU
- hdu 2955 Robberies
- HDU 2955 - Robberies
- hdu 2955 Robberies DP
- Hdu 2955 - Robberies
- hdu 2955 Robberies
- hdu 2955 Robberies
- hdu Robberies 概率DP
- hdu 2955 Robberies
- hdu 2955 Robberies
- HDU 2955 Robberies
- java设计模式之工厂模式
- MySQL——delete 和 truncate 以及 drop 区别
- 微服务API级权限的技术架构
- 使用支持向量机(分类)对手写体数字图像进行识别
- matalb取整函数round、fix、ceil和floor函数在fpga中的实现
- Robberies HDU
- android N FileProvider使用方法
- 注册页面DIV实现(CSS盒子模型、超链接的伪类)
- $.get和$.post引起的中文乱码问题
- jsp基本语法
- 什么是听觉?机器听觉?
- 内存溢出
- 虽然我是菜比,但这里的资料都是我亲自尝过的
- 协变与逆变