[Medium] BricksN
Topcoder SRM 523 Div1
DP로 해결해보자
C[i] = 1xi 를 채우는 경우의 수
= sum( C[i-j] , 1 <= j <= i , j <= k )
D[i][j] = 최대 높이가 i이고 밑판 길이가 j인 building 의 경우의 수
= D[i-1][j] * C[j]
+ sum( D[i-1][k] * C[k] * D[i][j-1-k] , 0 <= k < j )
첫번째 항은 밑판 전체를 채우는 경우
두번째 항은 밑판 왼쪽 끝에 길이 k만큼 연속해 채우는 경우