14852번 타일 채우기3

서재혁·2022년 8월 15일
0

DP

목록 보기
2/6

문제

2×N 크기의 벽을 2×1, 1×2, 1×1 크기의 타일로 채우는 경우의 수를 구해보자.

입력

첫째 줄에 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 경우의 수를 1,000,000,007로 나눈 나머지를 출력한다.

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>

using namespace std;

long long arr[1000001];


void solve()
{
	int N;
	scanf("%d", &N);
	arr[0] = 1;
	arr[1] = 2;
	arr[2] = 7;
	long long temp = 0;
	for (int i = 3; i <= N; i++)
	{
		temp += arr[i - 3] * 2;
		arr[i] = (3 * arr[i - 2] + 2 * arr[i - 1] + temp) % 1000000007;
	}
	printf("%lld", arr[N]);
}

int main(void)
{
	solve();
	return 0;
}

풀이

일반적인 타일 채우기 형태이다.

연관 : DP

profile
조금만 더

0개의 댓글