当前位置: 首页 > news >正文

【P2051】中国象棋 - Harvey

题意

求有多少种棋盘使得每一列和每一行的棋子个数不超过 \(2\) 个。

思路

设计 \(f_{i,j,k}\) 表示前 \(i\) 行,有 \(j\) 列为 \(1\) 个棋子,\(k\) 列为 \(0\) 个棋子。

  • 考虑当前行放 \(0\) 个棋子,则有 \(f_{i,j,k} = f_{i-1,j,k}\)
  • 若当前行放 \(1\) 个棋子,一种可能是放在 \(1\) 的列,另一种可能是放在 \(0\) 的列。
  • 若当前行放 \(2\) 个棋子,可以两个都放 \(0\),或者两个都放 \(1\),或者一个放 \(0\) 一个放 \(1\)

对应的情况要乘对应的排列系数,比较显然就不再赘述。

code

#include<bits/stdc++.h>
#define ll long longusing namespace std;const ll N = 105,mod = 9999973,inv = 4999987;int n,m;
ll dp[N][N][N];
void add(ll &x,ll y){(x+=y)%=mod;
}
int main() {cin>>n>>m;ll ans=0;dp[0][0][m]=1;for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){for(int k=0;k<=m-j;k++){ll &res=dp[i][j][k];add(res,dp[i-1][j][k]);add(res,dp[i-1][j+1][k]*(j+1)%mod);if(j)add(res,dp[i-1][j-1][k+1]*(k+1)%mod);if(j>=2)add(res,dp[i-1][j-2][k+2]*(k+2)%mod*(k+1)%mod*inv%mod);add(res,dp[i-1][j+2][k]*(j+2)%mod*(j+1)%mod*inv%mod);
//				add(res,dp[i-1][j][k+1]*(k+1)%mod);add(res,dp[i-1][j][k+1]*(k+1)%mod*j%mod);if(i==n)ans=(ans+res)%mod;}}}cout<<ans;return 0;
}
http://www.wxhsa.cn/company.asp?id=6946

相关文章:

  • JavaDay6
  • Ubuntu Linux 云服务器常见安全漏洞修复方法汇总 Apache/OpenSSH/DNS
  • AI智能体开发实战:从提示工程转向上下文工程的完整指南
  • 解码C语言九条语句
  • 多个 root 用户记录,而且有些记录的密码是空的,导致认证混乱。
  • 解题报告-P11670 [USACO25JAN] Cow Checkups S
  • word vba 对 带编号格式的PO单 段落下添加对应的图片
  • 解题报告-P11671 [USACO25JAN] Farmer Johns Favorite Operation S
  • 解码C语言运算符
  • 多进程
  • 93. 递归实现组合型枚举
  • Sort方法学习(伪代码记录)
  • 深入解析:【每日一问】运算放大器与比较器有什么区别?
  • 9.17支配对问题专题总结
  • 记录知识
  • AT_agc058_b [AGC058B] Adjacent Chmax
  • Jenkins CVE-2018-1000600漏洞利用与SSRF攻击分析
  • NOIP 集训日记(学术)
  • linux中mysql如何远程连接
  • 详细介绍:Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
  • 深入解析:PYcharm——pyqt音乐播放器
  • Day02
  • 专题:Python实现贝叶斯线性回归与MCMC采样数据可视化分析2实例|附代码数据
  • 威联通NAS如何导入本地docker镜像
  • 【学习笔记】拉格朗日插值
  • 一种将离散化状态方程映射为并行多处理器计算机的方法
  • 基本数据类型题目
  • 一种基于动作指令交互的动态活体检测技术,提升人脸识别安全性
  • [系统] Windows 已有office版本和visio不兼容的解决方案
  • CF 2127F Hamed and AghaBalaSar