标签:vector 超过 i++ using mat int += cpp ++
小偷去抢钱,每个银行有一定的钱和抢这个银行被抓的概率。
被抓概率有一个上限,在不超过这个概率的情况下能抢到的最大的钱是多少。
将被抓的概率转换为安全的概率。
dp[i] 表示,抢到i的钱的安全概率是多少。
01背包。
#include <iostream>
#include <memory.h>
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
#include <math.h>
using namespace std;
typedef long long LL;
const int MAXN = 1e4 + 10;
double dp[MAXN];
int a[MAXN];
double b[MAXN];
int main()
{
int t;
int n;
double v;
scanf("%d", &t);
while (t--)
{
memset(dp, 0, sizeof(dp));
scanf("%lf%d", &v, &n);
v = 1 - v;
int sum = 0;
for (int i = 1;i <= n;i++)
{
scanf("%d%lf", &a[i], &b[i]);
sum += a[i];
b[i] = 1 - b[i];//安全概率
}
dp[0] = 1.0;
for (int i = 1;i <= n;i++)
{
for (int j = sum;j >= a[i];j--)
dp[j] = max(dp[j], dp[j - a[i]] * b[i]);
}
for (int i = sum;i >= 0;i--)
if (dp[i] >= v)
{
printf("%d\n", i);
break;
}
}
return 0;
}
标签:vector 超过 i++ using mat int += cpp ++
原文地址:https://www.cnblogs.com/YDDDD/p/10464872.html