다음의 점화식에 의해 정의된 수열 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 ≤ 35에 대하여 t(n)을 출력하는 프로그램을 작성하시오.
첫째 줄에 n (0 ≤ n ≤ 35)이 주어진다.
첫째 줄에 t(n)을 출력한다.
t(n)
이 된다.n
에 해당하는 배열 값을 출력하면 된다.arr[i][j] = d[i - j -1] * d[j]
loop
를 더 줄일 수 없을까 하다가 오히려 이상하게 접근했다.열심히 곱하다가 내가 감달할 수 없는 값이 나왔을 때 이상하다는 걸 느꼈다.
#include <iostream>
using namespace std;
long long arr[36][36];
long long d[36];
int main(void) {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin >> n;
d[0] = 1;
d[1] = 1;
for (int i = 2; i <= 35; i++) {
long long sum = 0;
for (int j = 0; j < i; j++) {
arr[i][j] = d[i - j -1] * d[j];
sum += arr[i][j];
}
d[i] = sum;
}
cout << d[n];
}