HDU - 4815 Little Tiger vs. Deep Monkey

2829 단어

제목의 대의: 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
"
, j); break; } } } return 0; }

좋은 웹페이지 즐겨찾기