专题三 · 1022

来源:互联网 发布:淘宝页面布局怎么设置 编辑:程序博客网 时间:2024/05/18 23:14

代码及解释

#include <cfloat>#include <iostream>#include <algorithm>// 题目有点奇怪,帮小偷偷东西……// 还是个普通背包// 方程:// f[j] = std::max(f[j], f[j - m[i]] * p[i])// 有用的宏定义:DBL_EPSILONconst 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;}
0 0
原创粉丝点击