1개의 댓글이 있습니다.
-
-
SinAska -
점화식이 잘못되었네요
블록을 정리할 수 있는 점화식은 아래면 충분합니다.
점화식을 간단하게 줄이면, 작성하신 긴코드대신, 10줄정도의 코드로
작성가능합니다.타일을 채울 수있는 전체 방법의 수는 아래와 같습니다.
T(K) = T(K-1)+T(K-2)
|() =() (세로로 세우는 방법 -> T(K-1), 가로로채우는 방법 -> T(K+2))대칭인 케이스는 괄호부분이 대칭이라고 가정하면,
이 두케이스로 정리할 수 있을 것같네요.
대칭도 메모이제이션해준후 전체경우의수에서 대칭의 수를 뺴주면
|()| =()=결과는 나오게 되겠죠... 다만 전체경우의 수가 long long의 값을
초과하므로 역modulo 연산도 필요합니다.우선 점화식 부터 다시 접근해보시는게 좋을듯하네요
8년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
chochogogo
3번째 case에서 오답이 나옵니다...
제가 생각한 문제 풀이 알고리즘은
현재 타일의 빈 공간의 최 좌측, 최 우측에서부터 타일을 채워 나간다고 가정했을 때
각 case는
|?????| //빈 공간의 제일 왼쪽, 오른쪽에 새워서 한개씩
|?????= //빈 공간의 제일 왼쪽에 세워서 한개, 오른쪽에 눞혀서 두개
=????| //빈 공간의 제일 왼쪽에 눞혀서 두개, 오른쪽에 세워서 한개
=????= //빈 공간의 제일 왼쪽, 오른쪽에 눞혀서 두개씩
이며,
놓을수 있는 칸이 없거나 한개만 놓을 수 있는 케이스에서
현재 상태까지가 대칭인지 여부를 통해 기저사례를 처리하는
방식입니다...
혹시 제 알고리즘이나 코드에 문제가 있으면 지적 부탁드립니다.
감사합니다!
9년 전