
For a few months now, Roy has been assessing the security of various banks and the amount of cash they hold. He wants to make a calculated risk, and grab as much money as possible.
His mother, Ola, has decided upon a tolerable probability of getting caught. She feels that he is safe enough if the banks he robs together give a probability less than this.
Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj .
Notes and Constraints
0 < T <= 100
0.0 <= P <= 1.0
0 < N <= 100
0 < Mj <= 100
0.0 <= Pj <= 1.0
A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.
3 0.04 3 1 0.02 2 0.03 3 0.05 0.06 3 2 0.03 2 0.03 3 0.05 0.10 3 1 0.03 2 0.02 3 0.05
2 4 6
= = 一开始想放大概率 但显然概率不一定是2位小数 = = 之后又想了一个dp[i]表示前i个银行的最大金额 c[i]为同步概率 最后发现这样损失了很多状态 - - 姿势不对
AC代码即为01背包 注意处理下精度 还有概率是less than 严格小于
//
// HDU 2955 Robbery
//
// Created by TaoSama on 2015-02-05
// Copyright (c) 2014 TaoSama. All rights reserved.
//
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>
#define CLR(x) memset(x, 0, sizeof(x))
using namespace std;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
const int MOD = 1e9 + 7;
const int N = 1e5 + 10;
int w[105];
double v[105], dp[N]; //dp[j]表示j钱数的最大概率
int main() {
#ifdef LOCAL
freopen("in.txt", "r", stdin);
// freopen("out.txt","w",stdout);
#endif
ios_base::sync_with_stdio(0);
int kase, n; cin >> kase;
while(kase--) {
memset(dp, 0, sizeof dp);
double p; 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];
}
dp[0] = 1; int ans = -INF;
for(int i = 1; i <= n; ++i)
for(int j = sum; j >= w[i]; --j)
dp[j] = max(dp[j], dp[j - w[i]] * v[i]);
for(int i = sum; i >= 0; --i)
if(dp[i] - p > EPS) {
ans = i;
break;
}
cout << ans << endl;
}
return 0;
}
957




被折叠的 条评论
为什么被折叠?



