본문 바로가기

개발/알고리즘

백준 1344 축구 C++

문제

www.acmicpc.net/problem/1344

 

1344번: 축구

홍준이는 축구 경기를 보고 있다. 그러다가 홍준이는 역시 두 팀 중 적어도 한 팀이 골을 소수로 득점할 확률이 궁금해 졌다. 축구 경기는 90분동안 이루어지고, 분석을 쉽게하기 위해서 경기를 5

www.acmicpc.net

코드

#include<bits/stdc++.h>

using namespace std;

const int n = 18;
double perA, perB, dp[20][20][20];

bool isPrime(int n)
{
    if (n == 0 || n == 1)
        return false;

    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
            return false;
    }

    return true;
}

double go(int idx, int x, int y) 
{
    if (idx == n)
        return isPrime(x) || isPrime(y) ? true : false;

    double& ret = dp[idx][x][y];
    if (ret > -0.5) 
        return ret;

    ret = 0.0;
    ret += go(idx + 1, x + 1, y) * perA * (1 - perB);
    ret += go(idx + 1, x + 1, y + 1) * perA * perB;
    ret += go(idx + 1, x, y + 1) * (1 - perA) * perB;
    ret += go(idx + 1, x, y) * (1 - perA) * (1 - perB);

    return ret;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> perA >> perB;
	perA *= 0.01, perB *= 0.01;
    memset(dp, -1, sizeof(dp));
    cout << go(0, 0, 0) << "\n";

	return 0;
}

'개발 > 알고리즘' 카테고리의 다른 글

백준 17070 파이프옮기기1 C++  (0) 2021.04.18
백준 1647 도시 분할 계획 C++  (0) 2021.04.17
백준 4781번 사탕가게 C++  (0) 2021.04.16
백준 2470 두 용액 C++  (0) 2021.04.13
백준 4811번 알약 C++  (0) 2021.04.13