$O(nlr)$
가장 작은 빌딩을 어디에 놓을지에 따라 전 dp항을 합해주면 된다.
dp[1][1][1]=1
dp[n][l][r]=dp[n-1][l][r]*(n-2)+dp[n-1][l-1][r]+dp[n-1][l][r-1]
#include<cstdio> #define mod 1000000007 int n, l, r, dp[101][101]; int main() { scanf("%d%d%d", &n, &l, &r); dp[1][1] = 1; for (int i = 2; i <= n; i++) for (int j = l; j; j--) for (int k = r; k; k--) dp[j][k] = ((long long)dp[j][k] * (i - 2) + dp[j - 1][k] + dp[j][k - 1]) % mod; printf("%d", dp[l][r]); return 0; }
댓글 없음 :
댓글 쓰기