HDU 6415 Rikka with Nash Equilibrium——dp

版权声明:欢迎大家转载,转载请注明出处 https://blog.csdn.net/hao_zong_yin/article/details/81878357
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 81;
int T, n, m, mod;
ll dp[2][maxn][maxn];
int main() {
    scanf("%d", &T);
    while (T--) {
        scanf("%d%d%d", &n, &m, &mod);
        int idx = 0;
        for (int i = 0; i <= n; i++) for (int j = 0; j <= m; j++) dp[idx][i][j] = 0;
        dp[idx][1][1] = n*m;
        for (int k = 2; k <= n*m; k++) {
            idx ^= 1;
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= m; j++) {
                    dp[idx][i][j] = 0;
                    if (i > 1 && dp[idx^1][i-1][j]) {
                        dp[idx][i][j] += dp[idx^1][i-1][j]*(n-i+1)*j;
                    }
                    if (j > 1 && dp[idx^1][i][j-1]) {
                        dp[idx][i][j] += dp[idx^1][i][j-1]*(m-j+1)*i;
                    }
                    if (dp[idx^1][i][j] && i*j-k+1 > 0) {
                        dp[idx][i][j] += dp[idx^1][i][j]*(i*j-k+1);
                    }
                    dp[idx][i][j] %= mod;
                }
            }
        }
        printf("%lld\n", dp[idx][n][m]);
    }
    return 0;
}
/*
2
3 3 100
5 5 2333
*/

猜你喜欢

转载自blog.csdn.net/hao_zong_yin/article/details/81878357
今日推荐