HDU - 4815 Little Tiger vs. Deep Monkey

来源:互联网 发布:c语言面向对象是什么 编辑:程序博客网 时间:2024/05/23 01:23

题目大意:有 A,B 两个人,n 道题目,每题有对应的分数,B 答对题目的概率是 0.5,求 A 不输给 B 的概率不小于 P 要拿的最低分数

解题思路:DP,dp[i][j] 来表示 B 答了前 i 题后分数为 j 的概率,,然后通过 B 的概率求 A 的最低分数

#include <cstdio>#include <cstring>double DP[45][40005];int main() {    int T;    scanf("%d", &T);    while (T--) {        int N, MAX, tmp;          double P;        scanf("%d%lf", &N, &P);        memset(DP, 0, sizeof(DP));        DP[0][0] = 1;        MAX = 0;        for (int i = 0; i < N; i++) {            scanf("%d", &tmp);            for (int j = 0; j <= MAX; j++)                if (DP[i][j] > 0) {                    DP[i + 1][j] += DP[i][j] * 0.5;                    DP[i + 1][j + tmp] += DP[i][j] * 0.5;                }            MAX += tmp;        }        double sum = 0;        for (int j = 0; j <= MAX; j++) {            sum += DP[N][j];            if (sum >= P) {                printf("%d\n", j);                break;            }        }    }     return 0;}
0 0
原创粉丝点击