01타일(백준 1904번)
다이나믹 프로그래밍(동적계획법)을 연습할 수 있는 문제이다.
다이나믹 프로그래밍의 경우 점화식을 세울 수 있으면 쉽게 문제를 해결할 수 있다.
이 문제의 경우, 경우의수를 하나하나 나열해보면
dp[1] = 1 //1
dp[2] = 2 //00, 11
dp[3] = 3 //100, 001, 111
dp[4] = 5 //0011, 1001, 1100, 0000, 1111
dp[5] = 8 //11100, 11001, 10011, 00111, 00001, 00100, 10000
이 된다.
이것을 통해 점화식을 세워보면
dp[i] = dp[i-1] + dp[i-2]
가 된다.
이것을 코드에 적용시키면 된다.
#include <iostream>
using namespace std;
int dp[1000001] = { 0, };
int main() {
int n;
cin >> n;
dp[1] = 1 % 15746;
dp[2] = 2 % 15746;
for (int i = 3; i <= n; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 15746;
}
cout << dp[n];
}
Author And Source
이 문제에 관하여(01타일(백준 1904번)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jiho9702/01타일백준-1904번저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)