-
백준 11726번: 2xn 타일링다이나믹프로그래밍(DP) 2018. 6. 23. 17:19반응형
https://www.acmicpc.net/problem/11726
1. 문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
2. 알고리즘
키워드 - 다이나믹 프로그래밍
피보나치 응용 문제로 보이기도 한다.
2 x 1 타일 - 1 개
2 x 2 타일 - 2 개
2 x 3 타일 - 3 개
2 x 4 타일 - 5 개
N 개의 타일을 만들위해 DP[N] = DP[N-2] + DP[N-1] 점화식을 세울 수 있다.
3. 코드
1234567891011121314151617181920212223242526272829303132333435363738394041#include <iostream>#include <sstream>#include <string>#include <algorithm>#include <functional>#include <vector>#include <list>#include <queue>#include <deque>#include <map>#include <set>#include <stack>#include <cstring>#define MAX_SIZE 100#define INF 0x7fffffffusing namespace std;long long dp[1001];int main() {std::ios::sync_with_stdio(false); cin.tie(0);int n; cin >> n;dp[0] = 0;dp[1] = 1;dp[2] = 2;for(int i =3; i<=n; i++) {dp[i] = dp[i-2] % 10007 + dp[i-1] % 10007;}long long sol = dp[n] % 10007;cout << sol << "\n";return 0;}cs 반응형'다이나믹프로그래밍(DP)' 카테고리의 다른 글
백준 11055 번: 가장 큰 증가 부분 수열 (0) 2018.08.02 백준 1912번: 연속합 (0) 2018.07.03 백준 10986번: 나머지 합 (0) 2018.07.01 백준 1904번: 01타일 (0) 2018.06.24 백준 11441번 : 합 구하기 (0) 2018.06.18