HDU - 1203 I NEED A OFFER!

来源:互联网 发布:淘宝订单清洗期几天 编辑:程序博客网 时间:2024/06/06 21:23

解题思路:题目要求的是至少收到一份Offer的最大概率,我们得到得不到的最小概率即可,状态转移方程: dp[j] = min(dp[j], dp[j - val[i]] * p[i]); 其中,p[i]表示得不到的概率, (1 - dp[j])  为花费j元得到Offer的最大概率

#include <cstdio>#include <algorithm>using namespace std;int main() {    int n, m;    while (scanf("%d%d", &n, &m) && n + m) {        double DP[10010];        for (int i = 0; i <= n; i++)            DP[i] = 1.0;        while (m--) {            int A;            double B;            scanf("%d%lf", &A, &B);            B = 1 - B;            for (int i = n; i >= A; i--)                DP[i] = min(DP[i], DP[i-A]*B);        }        printf("%.1lf%%\n", (1 - DP[n]) * 100);    }    return 0;}
0 0
原创粉丝点击