방 바닥의 길이와 너비를 나타내는 두 개의 숫자 n과 m이 주어집니다. 목표는 1Xm 크기의 타일을 사용하여 이 바닥을 타일로 만들 수 있는 방법의 수를 계산하는 것입니다.
예를 들어
입력
n=3 m=2
출력
Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 3
설명
방법은 아래와 같이 배열된 3개의 1x2 타일입니다 -
입력
n=3 m=3
출력
Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 2
설명
The ways will be three 1x3 tiles arranged vertically and horizontally. Only two ways.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -
이 접근 방식에서 우리는 n의 값을 확인합니다. n이 m보다 작고 값이 1이면 1Xm 크기의 바닥 전체에 하나의 타일만 배치됩니다.
n이 m과 같으면 n 1xm 타일을 모두 수직으로, 모두 수평으로 배치하는 2가지 방법이 있습니다. n이 m보다 크면 이전 방법을 사용하여 방법을 계산합니다 - way[n−1]+ways[m−1].
-
바닥과 타일의 크기에 대해 정수 m과 n을 사용합니다.
-
way_tile_floor(int N, int M) 함수는 1 x m 크기의 타일을 사용하여 n x m 크기의 바닥을 타일링하는 방법의 수를 반환합니다.
-
인덱스 i=N의 현재 값에 대한 타일 수를 저장하려면 길이가 N+1인 배열 arr[ ]를 사용합니다.
-
arr[0]의 경우 타일은 0입니다. 따라서 arr[0]=0입니다.
-
i=1에서 i=N까지 for 루프를 사용하여 rr[]을 트래버스합니다. 각 arr[i]에 대해 i>M이면 이전 값을 사용하여 개수를 계산합니다. arr[i]=arr[i − 1] + arr[i − M].
-
i=1 및 또는 i
-
i=M인 경우 arr[i]=2로 설정합니다.
-
for 루프의 끝에서 arr[N]은 타일을 정렬하는 방법의 수를 갖습니다.
-
결과로 ar[N]을 반환합니다.
예시
#include <bits/stdc++.h> using namespace std; int ways_tile_floor(int N, int M){ int arr[N + 1]; arr[0] = 0; for (int i = 1; i <= N; i++){ if (i > M){ arr[i] = arr[i − 1] + arr[i − M]; } else if (i < M || i == 1){ arr[i] = 1; } else { arr[i] = 2; } } return arr[N]; } int main(){ int n = 3, m = 2; cout<<"Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: "<<ways_tile_floor(n, m); return 0; }
출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -
Count the number of ways to tile the floor of size n x m using 1 x m size tiles are: 3