[2133] 타일링 3

1 minute read

백준님 풀이

tileing-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;
}

Tags:

Categories:

Updated: