KoreanFoodie's Study
[종만북 문제] 달팽이 (문제 ID : SNAIL, 난이도 : 하) 본문
프로그래밍 대회에서 배우는 알고리즘 문제해결 전략(이하 종만북)에서 소개된 문제를 풀이합니다. 알고리즘에 진심이시라면, 직접 구매하셔서 읽어보시는 것을 추천합니다!
핵심 :
1. 시시해서 죽고 싶어졌다.
[종만북 문제] 달팽이 (문제 ID : SNAIL, 난이도 : 하)
쉬운 DP 문제다. 점화식만 잘 세우면 되는데... 책에서는 아래처럼 만들더라.
나 같은 경우, 아래와 같이 풀었다. 점화식의 원리는 거의 동일하다!
#include <iostream>
#include "stdlib.h"
#include <cmath>
#include <vector>
#include <map>
#include <algorithm>
#include <unordered_map>
using namespace std;
/****************************************************************************************************/
int N; // 우물의 깊이
int M; // 장마 기간
const double RAIN = 0.75;
const int DAYS = 1001;
unordered_map<int, double> cache;
double calc(int days, int dist)
{
// 기저 케이스 : 불가능
if (days * 2 < dist)
return 0.0;
// 기저 케이스 : 불가능
if (days == 0 && dist > 0)
return 0.0;
// 기저 케이스 : 가능
if (days >= 0 && dist <= 0)
return 1.0;
if (cache.count(days * DAYS + dist))
return cache[days * DAYS + dist];
double ret = 0.0;
ret = 0.75 * calc(days - 1, dist - 2) + 0.25 * calc(days - 1, dist - 1);
cache[days * DAYS + dist] = ret;
return ret;
}
void sol()
{
cache.clear();
//cout << calc(N, M) << endl;
printf("%.10f\n", calc(M, N));
}
void inputHandler()
{
cin >> N;
cin >> M;
}
int main()
{
int cases;
cin >> cases;
while (cases--)
{
inputHandler();
sol();
}
return 0;
}
😄
'Data Structures, Algorithm > 종만북' 카테고리의 다른 글
[종만북 문제] 폴리오미노 (문제 ID : POLY, 난이도 : 중) (0) | 2024.03.13 |
---|---|
[종만북 문제] 비대칭 타일링 (문제 ID : ASYMTILING, 난이도 : 하) (0) | 2024.03.12 |
[종만북 문제] 삼각형 위의 최대 경로 수 세기 (문제 ID : TRIPATHCNT, 난이도 : 중) (0) | 2024.03.12 |
[종만북 문제] 타일링 (문제 ID : TILING2, 난이도 : 하) (0) | 2024.03.12 |
[종만북 문제] Quantization (문제 ID : QUANTIZE, 난이도 : 중) (0) | 2024.03.11 |
Comments