bzoj1801中国象棋

题目链接

很裸的$dp+$组合计数

注意

注意

注意

$BZOJ$不要用玄学优化

$CE$不管$qwq$

/**************************************************************
    Problem: 1801
    User: zhangheran
    Language: C++
    Result: Accepted
    Time:196 ms
    Memory:11692 kb
****************************************************************/
 
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("inline")
//#pragma GCC optimize("-fgcse")
//#pragma GCC optimize("-fgcse-lm")
//#pragma GCC optimize("-fipa-sra")
//#pragma GCC optimize("-ftree-pre")
//#pragma GCC optimize("-ftree-vrp")
//#pragma GCC optimize("-fpeephole2")
//#pragma GCC optimize("-ffast-math")
//#pragma GCC optimize("-fsched-spec")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-falign-jumps")
//#pragma GCC optimize("-falign-loops")
//#pragma GCC optimize("-falign-labels")
//#pragma GCC optimize("-fdevirtualize")
//#pragma GCC optimize("-fcaller-saves")
//#pragma GCC optimize("-fcrossjumping")
//#pragma GCC optimize("-fthread-jumps")
//#pragma GCC optimize("-funroll-loops")
//#pragma GCC optimize("-fwhole-program")
//#pragma GCC optimize("-freorder-blocks")
//#pragma GCC optimize("-fschedule-insns")
//#pragma GCC optimize("inline-functions")
//#pragma GCC optimize("-ftree-tail-merge")
//#pragma GCC optimize("-fschedule-insns2")
//#pragma GCC optimize("-fstrict-aliasing")
//#pragma GCC optimize("-fstrict-overflow")
//#pragma GCC optimize("-falign-functions")
//#pragma GCC optimize("-fcse-skip-blocks")
//#pragma GCC optimize("-fcse-follow-jumps")
//#pragma GCC optimize("-fsched-interblock")
//#pragma GCC optimize("-fpartial-inlining")
//#pragma GCC optimize("no-stack-protector")
//#pragma GCC optimize("-freorder-functions")
//#pragma GCC optimize("-findirect-inlining")
//#pragma GCC optimize("-fhoist-adjacent-loads")
//#pragma GCC optimize("-frerun-cse-after-loop")
//#pragma GCC optimize("inline-small-functions")
//#pragma GCC optimize("-finline-small-functions")
//#pragma GCC optimize("-ftree-switch-conversion")
//#pragma GCC optimize("-foptimize-sibling-calls")
//#pragma GCC optimize("-fexpensive-optimizations")
//#pragma GCC optimize("-funsafe-loop-optimizations")
//#pragma GCC optimize("inline-functions-called-once")
//#pragma GCC optimize("-fdelete-null-pointer-checks")
//#include"suqingnian.h"
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int mod=9999973;
long long dp[110][110][110];
int n,m;long long ans;
long long calc(long long xx) {return xx*(xx-1)/2;}
int main()
{
    scanf("%d%d",&n,&m);
    dp[0][0][0]=1;
    for(int i=0;i<n;i++)
      for(int j=0;j<=m;j++)
        for(int k=0;k<=m-j;k++)
        if(dp[i][j][k]){
        if(j-2>=0)  dp[i+1][j-2][k+2]=(dp[i+1][j-2][k+2]+dp[i][j][k]*calc(j))%mod;
        if(j-1>=0)  dp[i+1][j-1][k+1]=(dp[i+1][j-1][k+1]+dp[i][j][k]*j)%mod;
            dp[i+1][j][k]=(dp[i+1][j][k]+dp[i][j][k])%mod,
            dp[i+1][j][k+1]=(dp[i+1][j][k+1]+dp[i][j][k]*(m-j-k)*j)%mod,
            dp[i+1][j+1][k]=(dp[i+1][j+1][k]+dp[i][j][k]*(m-j-k))%mod,
            dp[i+1][j+2][k]=(dp[i+1][j+2][k]+dp[i][j][k]*calc(m-j-k))%mod;
//      printf("%d %d %d %d\n",i,j,k,dp[i][j][k]); 
    }
    for(int i=0;i<=m;i++)
      for(int j=0;j<=m-i;j++)
//      printf("%lld ",dp[n][i][j]);
        ans=(ans+dp[n][i][j])%mod;
    printf("%lld\n",ans%mod);
}

 

posted @ 2018-07-25 21:54  米罗偕涯  阅读(234)  评论(0编辑  收藏  举报