- 문제 링크 : boj.kr/17211
- 난이도 : S5
- 태그 : 확률론, DP
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, c;
cin >> n >> c;
ld p[2][2];
cin >> p[0][0] >> p[0][1] >> p[1][0] >> p[1][1];
vector<array<ld, 2>> dp(n+1);
dp[0][c] = 1;
for(int i = 1; i <= n; i++) {
dp[i][0] = dp[i-1][0] * p[0][0] + dp[i-1][1]*p[1][0];
dp[i][1] = dp[i-1][0] * p[0][1] + dp[i-1][1]*p[1][1];
}
cout << int(dp[n][0] * 1000) << "\n";
cout << int(dp[n][1] * 1000) << "\n";
return 0;
}
풀이
각 날짜의 확률을 다음의 식을 통해 구할 수 있다.
i일차가 좋은 날일 확률 = i-1일차가 좋은 날일 확률 * 좋은 날 이후 좋은 날일 확률 + i-1일차가 싫은 날일 확률 * 싫은 날 이후 좋은 날일 확률
i일차가 싫은 날일 확률 = i-1일차가 좋은 날일 확률 * 좋은 날 이후 싫은 날일 확률 + i-1일차가 싫은 날일 확률 * 싫은 날 이후 싫은 날일 확률
식을 구했으므로 모든 날에 대해서 DP를 수행하면 답을 구할 수 있다.
728x90
'PS' 카테고리의 다른 글
BOJ 10816 : 숫자 카드 2 (0) | 2024.12.30 |
---|---|
BOJ 33049 : 마작에서 가장 어려운 것 (0) | 2024.12.30 |
BOJ 25369 : 카드 숫자 곱을 최소로 만들기 (0) | 2024.12.27 |
BOJ 31563 : 수열 회전과 쿼리 (0) | 2024.12.26 |
BOJ 8975 : PJESMA (1) | 2024.12.25 |