专题三 · 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的主要内容,如果未能解决你的问题,请参考以下文章

专题三--1017

专题三 · 1014

专题三 · 1006

专题三-动态规划算法总结

专题三 · 1017

专题三 · 1013