1001-Rikka with Nash Equilibrium(hdu 6415)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6415 
 题意:就是说给一个        的矩阵 ,如果一个元素满足比他的这一行或者这一列的所有元素都打的话,这个元素就满足“纳什均衡”,问:用       来填这个矩阵,满足只有一个元素是“纳什均衡” 的方案数?
其实不是很懂这道题,看网上大佬的博客说是这样:        表示有         行         列,选了         个数的方案数 
 我也不懂为啥         这个初始值要设为        ,难道是         个位置随便选一个,所以又         种??? 
 但是这样跟“纳什均衡”有什么关系?
然后后面说就这样         感觉还能理解一点T_T 
 等题解出来再看看吧
#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
const int maxn=85;
LL dp[maxn][maxn][maxn*maxn];//占了i行j列有k个点的方案数 
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        LL N,M,MOD;
        scanf("%lld%lld%lld",&N,&M,&MOD);
        for(int i=1;i<=N;i++)//用memset还超时T_T
        for(int j=1;j<=M;j++)
        for(int k=1;k<=N*M;k++)dp[i][j][k]=0;
        dp[1][1][1]=N*M;
        for(LL k=2;k<=N*M;k++)
        {
            for(LL i=1;i<=N;i++)
            {
                for(LL j=1;j<=M;j++)
                {
                    dp[i][j][k]+=(N-(i-1))*(j)*dp[i-1][j][k-1];//上一次放了i-1行,这一次在剩下的行中选一行 
                    dp[i][j][k]+=(M-(j-1))*(i)*dp[i][j-1][k-1];//同理,上次放了j-1行,这一次在剩下的列中选一列 
                    if(i*j-(k-1)>=1)dp[i][j][k]+=(i*j-(k-1))*dp[i][j][k-1];//要是不想产生新的行或列,那就是放在交点上 
                    if(dp[i][j][k]>MOD)dp[i][j][k]%=MOD;
                }
            }
        }
        printf("%lld\n",dp[N][M][N*M]);
    }
}
京公网安备 11010502036488号