-
비대칭 타일링알고리즘 풀이/알고리즘 해결전략 연습 2019. 7. 7. 02:48
문제 : https://algospot.com/judge/problem/read/ASYMTILING
코드 ( C ++ ) 종만북 참조
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAX = 100+1;
int cache[MAX];
const int MOD = 1000000007;
int tiling(int width)
{
if (width <= 1) return 1;
int& ret = cache[width];
if (ret != -1)
return ret;
return ret = (tiling(width - 1) + tiling(width - 2)) % MOD;
}
int atiling(int width)
{
if (width % 2 == 1)
return (tiling(width) - tiling(width / 2) + MOD) % MOD; // 홀수인 경우 가운데에 2*1타일이 세로로 하나 놓일때
int ret = tiling(width);
ret = (ret - tiling(width / 2) + MOD) % MOD; // 짝수인 경우 반이 정확이 나뉘어 질때
ret = (ret - tiling(width / 2 - 1) + MOD) % MOD; // 짝수인 경우 가운데에 2*1타일이 가로로 두개 놓이고 반이 나눠질때
return ret;
}
int main()
{
int C;
cin >> C;
while (C--)
{
memset(cache, -1, sizeof(cache));
int num;
cin >> num;
int result = atiling(num);
cout << result << endl;
}
}
'알고리즘 풀이 > 알고리즘 해결전략 연습' 카테고리의 다른 글
Mismatched Brackets (0) 2019.07.10 여행 짐 싸기 (0) 2019.07.10 삼각형 위의 최대 경로 수 세기 (0) 2019.07.07 원주율 외우기 (0) 2019.07.05 삼각형 위의 최대 경로 (0) 2019.07.03