码迷,mamicode.com
首页 > 其他好文 > 详细

HDU - 1203 I NEED A OFFER!

时间:2015-08-21 17:16:12      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

解题思路:题目要求的是至少收到一份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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU - 1203 I NEED A OFFER!

标签:

原文地址:http://blog.csdn.net/kl28978113/article/details/47835643

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!