일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 회고록
- 너비 우선 탐색
- 플로이드 와샬
- back propagation
- dropout
- dfs
- 조합론
- 다익스트라
- Overfitting
- pytorch
- 미래는_현재와_과거로
- 분할 정복
- lazy propagation
- 문자열
- c++
- DP
- 알고리즘
- 2023
- object detection
- NEXT
- tensorflow
- 가끔은 말로
- 세그먼트 트리
- 우선 순위 큐
- 이분 탐색
- BFS
- 가끔은_말로
- 백트래킹
- 자바스크립트
- 크루스칼
Archives
- Today
- Total
Doby's Lab
백준 13699번: 점화식 (C++) 본문
https://www.acmicpc.net/problem/13699
13699번: 점화식
다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0) 이 정의에 따르면, t(1)=t(0)*t(0)=1 t(2)=t(0)*t(1)+t(1)*t(0)=2 t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5 ... 주어진 입력 0 ≤ n
www.acmicpc.net
Solved By: DP
Top-Down DP 방법을 사용했습니다. 재귀 호출로 선언하여 t(n) 값이 존재한다면 그대로 리턴하고, 존재하지 않는다면 t(n)을 구하여 리턴하는 방식으로 Memoization 기법이 상당히 드러나는 문제였습니다.
#include <iostream>
#define MAX 36
#define ll long long
using namespace std;
int n;
ll t[MAX];
ll sol(int p){
if(t[p]) return t[p];
else{
ll temp = 0;
for(int i = 0; i < p; i++){
temp += (sol(i) * sol(p - 1 - i));
}
return t[p] = temp;
}
}
int main(){
cin >> n;
t[0] = 1;
cout << sol(n);
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
백준 9344번: 도로 (C++) (0) | 2022.05.21 |
---|---|
백준 14916번: 거스름돈 (C++) (0) | 2022.05.18 |
백준 9625번: BABBA (C++) (0) | 2022.05.17 |
백준 1585번: 경찰 (C++) (0) | 2022.05.16 |
백준 14950번: 정복자 (C++) (0) | 2022.05.08 |