NC19885. [AHOI2009]CHESS 中国象棋
描述
输入描述
一行包含两个整数N,M,中间用空格分开.
输出描述
输出所有的方案数,由于值比较大,输出其mod 9999973
示例1
输入:
1 3
输出:
7
C++ 解法, 执行用时: 18ms, 内存消耗: 6776K, 提交时间: 2021-06-16 20:48:00
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=9999973; ll dp[105][105][105]; int n,m; ll dfs(ll cur,ll u,ll v,ll w){ if(cur==n+1) return 1; if(dp[cur][u][v]) return dp[cur][u][v]; ll ans=dfs(cur+1,u,v,w)%mod; if(u>0) ans+=dfs(cur+1,u-1,v+1,w)%mod*u%mod; if(v>0) ans+=dfs(cur+1,u,v-1,w+1)%mod*v%mod; if(u>0&&v>0) ans+=dfs(cur+1,u-1,v,w+1)%mod*u*v%mod; if(u>1) ans+=dfs(cur+1,u-2,v+2,w)%mod*u*(u-1)/2%mod; if(v>1) ans+=dfs(cur+1,u,v-2,w+2)%mod*v*(v-1)/2%mod; dp[cur][u][v]=ans%mod; return dp[cur][u][v]; } int main(){ cin>>n>>m; cout<<dfs(1,m,0,0)%mod; }