hdu 6415 Rikka with Nash Equilibrium DP

15 篇文章 0 订阅

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6415

dp i,j,k代表
当前已经放置了n-i+1~n个数,剩下的数字不能在j行,k列中放置
③:
1.dpi+1,j,k+1;
2.dpi+1,j+1,k;
3.dpi+1,j,k;
倒着DP时,最后输出DP【n*m】【n】【m】

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
using namespace std;

LL dp[6410][85][85];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        //lan(dp,0);
        int n,m,mod;
        scanf("%d%d%d",&n,&m,&mod);
        dp[n*m][n][m]=(LL)n*m%mod;
        Dor(i,n*m-1,1)
        {
            Dor(j,n,1)
                Dor(k,m,1)
                {
                   // if(i==1&&j==1&&k==1)
                   if(j*k<i)
                    break;

                    dp[i][j][k]=dp[i+1][j][k]*(j*k-i)%mod;
                    dp[i][j][k]=(dp[i][j][k]+dp[i+1][j+1][k]*(n-j)*k)%mod;
                    dp[i][j][k]=(dp[i][j][k]+dp[i+1][j][k+1]*j*(m-k))%mod;
                }
        }
        printf("%lld\n",dp[1][1][1]);
    }
    return 0;
}

//

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值