在这道题中,你需要编写一个程序来计算有多少种方法让 k 只小豚鼠安排在 n 行 m 列的房子中,使得房子的最外圈尽量每行每列都有一只小豚鼠居住。
你可以使用以下方式来解决这道题:
先枚举最外圈有几行几列没有小豚鼠。
然后使用递归的方法在剩余的格子里安排小豚鼠。
最后,将结果对 1e9+7 取模。
这是一个使用 C 语言的参考代码:
``` #include <stdio.h> #include <string.h>
#define mod 1000000007
int n, m, k; long long dp[25][25][400];
long long dfs(int x, int y, int z) { if (dp[x][y][z] != -1) { return dp[x][y][z]; } if (z == 0) { return 1; } long long ans = 0; if (x > 1 && y > 1) { ans += dfs(x - 2, y - 2, z - 1) * (x - 1) * (y - 1); ans %= mod; } if (x > 1) { ans += dfs(x - 2, y, z - 1) * (x - 1) * y; ans %= mod; } if (y > 1) { ans += dfs(x, y - 2, z - 1) * x * (y - 1); ans %= mod; } if (x > 2 && y > 1) { ans += dfs(x - 3, y - 1, z - 1) * (x - 2) * (y - 1); ans %= mod; } if (x > 1 && y > 2) { ans += dfs(x - 1, y - 3, z - 1) * (x - 1) * (y - 2); ans %= mod; } return dp[x][y][z] = ans; }
int main() { memset(dp, -1, sizeof(dp)); scanf("%d%d%d", &n, &m, &k); printf("%lld\n", dfs(n