[2133] 타일링 3
백준님 풀이
dp[i] += dp[i-3] * 3;
dp[i] += 2; //위 그림에서 가장 아래의 두 가지 경우를 최대로 연장한 두 가지
for (int j = 2; j < i - 2; j += 2) {
dp[i] += dp[j] * 2; //위 그림에서 가운데 부분의 경우를 모두 고려하는 부분
}
백준님 풀이 내 코드
#include <cstdio>
using namespace std;
int n;
long long dp[31];
int main(void) {
scanf("%d", &n);
dp[2] = 3;
dp[4] = 11;
for (int i = 6; i <= 30; i++) {
if (i % 2 == 0) {
for (int j = 2; j < i - 2; j += 2) {
dp[i] += dp[j] * 2;
}
dp[i] += dp[i - 2] * 3 + 2;
}
}
printf("%lld\n", dp[n]);
return 0;
}
백준님 풀이 백준님 코드
핵 깔-끔
#include <iostream>
using namespace std;
long long d[31];
int main() {
int n;
cin >> n;
d[0] = 1;
for (int i = 2; i <= n; i += 2) {
d[i] = d[i - 2] * 3;
for (int j = i - 4; j >= 0; j -= 2) {
d[i] += d[j] * 2;
}
}
cout << d[n] << '\n';
return 0;
}