괄호

Wonseok Lee·2021년 12월 14일
0

Beakjoon Online Judge

목록 보기
67/117
post-thumbnail

Problem link: https://www.acmicpc.net/problem/10422

DP의 고전 of 고전 카탈란 수 문제이다.

별다른 풀이는 없지만, 기억 열화를 막고자 점화식을 떠올리는 방법을 아래와 같이 적어 놓는다.

편의상 N이 6이었다고 할 때, 아래 경우의 수를 헤아리면 중복/빠짐 없이 모든 경우를 헤아리게 된다.

  • ( ) _ _ _ _
  • ( _ _ ) _ _
  • ( _ _ _ _ )
#include <iostream>
#include <cstdint>

using namespace std;

const int64_t kMod = 1000000007;
int64_t CACHE[5000 + 1];

int main(void)
{
  // For Faster IO
  ios_base::sync_with_stdio(false);
  cout.tie(nullptr);
  cin.tie(nullptr);

  // Solve all
  CACHE[0] = 1;
  CACHE[2] = 1;
  for (int64_t n = 4; n <= 5000; n += 2)
  {
    for (int64_t closing = 1; closing <= n; closing += 2)
    {
      CACHE[n] += CACHE[closing - 1] * CACHE[n - closing - 1];
      CACHE[n] %= kMod;
    }
  }

  int64_t tc;
  cin >> tc;

  while (tc--)
  {
    int64_t n;
    cin >> n;
    cout << CACHE[n] << '\n';
  }

  return 0;
}
profile
Pseudo-worker

0개의 댓글