专题三 · 1022
Posted suamfadmp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了专题三 · 1022相关的知识,希望对你有一定的参考价值。
代码及解释
#include <cfloat>
#include <iostream>
#include <algorithm>
// 题目有点奇怪,帮小偷偷东西……
// 还是个普通背包
// 方程:
// f[j] = std::max(f[j], f[j - m[i]] * p[i])
// 有用的宏定义:DBL_EPSILON
const int SIZE = 10010;
int m[SIZE];
double p[SIZE];
int main()
int t;
std::cin >> t;
while (t--)
int n;
double probability;
std::cin >> probability >> n;
probability = 1 - probability;
int sum = 0;
for (int i = 0; i<n; i++)
std::cin >> m[i] >> p[i];
p[i] = 1 - p[i];
sum += m[i];
double f[SIZE] = 1.0 ;
for (int i = 0; i<n; i++)
for (int j = sum; j >= m[i]; j--)
f[j] = std::max(f[j], f[j - m[i]] * p[i]);
for (int i = sum; i >= 0; i--)
if (f[i] - probability > DBL_EPSILON)
printf("%d\\n", i);
break;
return 0;
以上是关于专题三 · 1022的主要内容,如果未能解决你的问题,请参考以下文章