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

P2051 [AHOI2009] 中国象棋 个人题解

题目链接

题目描述:

给你一个 \(n*m\) 的棋盘,棋盘的每行和每列只能放置有 \(2\) 个棋子(可以放置 \(0\) 个棋子),问有多少种放置方案

解题方法:

这道题看起来像是八皇后问题的加强版,但是如果一个个枚举的话,复杂度将是天文数字,可以发现这是在有限集合内求最优解的问题,我们使用 DP 来解决,下面用闫氏 DP 分析法来考虑状态转移方程。

状态表示:

集合:我们用 \(f[i][j][k]\) 表示所有前 \(i\) 行有 \(j\) 列放置了一个棋子且有 \(k\) 列放置了两个棋子的方案数集合

属性:MAX

状态计算:

1. 当前第 \(i\) 行一个棋子也不放时

由上一行也就是第 \(i-1\) 行的状态直接转移过来:
\(f[i][j][k]=f[i-1][j][k]\)

2. 当前第 \(i\) 行放置一个棋子时

此时分为两种情况,一种是选择空列放置时,另一种是选择已经放置一个棋子的列。

1° 当选择空列放置时

由第 \(i-1\) 行,有 \(j-1\) 列放置了一个棋子且有 \(k\) 列放置了两个棋子的方案数转移过来,为什么是 \(j-1\) 而不是 \(j\) 呢?因为如果我们在一个空列上新放一个棋子,那么就会新产生有一个棋子的一列,而我们当前的状态为 \(f[i][j][k]\) ,所以是从 \(f[i-1][j-1][k]\) 转移过来,注意到此时一共有 \(m-(j-1)-k\) 个空列,所以方案数要加上 \(f[i-1][j-1][k]*(m-(j-1)-k)\) ,即此时的状态转移方程为:
\(f[i][j][k]+=f[i-1][j-1][k]*(m-(j-1)-k)\)

2°当选择已经放置一个棋子的列时

由第 \(i-1\) 行,有 \(j+1\) 列放置了一个棋子且有 \(k-1\) 列放置了两个棋子的方案数转移过来,与上面一样都是根据当前的状态,在放到已经放置了一个棋子的列上后,这一列变成放置了两个棋子的列,所以是从 \(f[i-1][j+1][k-1]\) 转移过来,此时一共有 \(j+1\) 列放置了一个棋子的列,即共有 \(j+1\) 种可能m,则此时的状态转移方程为;
\(f[i][j][k]+=f[i-1][j+1][k-1]*(j+1)\)

3. 当前第 \(i\) 行放置两个棋子时

此时分为三种情况,一种时都选择空列位置,一种是都选择已经放置一个棋子的列,还有一种是一个棋子选择空列,另一个棋子选择已经放置一个棋子的列。

1°当都选择空列放置时

由第 \(i-1\) 行,有 \(j-2\) 列放置了一个棋子且有 \(k\) 列放置了两个棋子的方案数转移过来,此时共有 \(m-(j-2)-k\) 个空列,而要放置两个棋子则选择数为

\[\begin{pmatrix} 2\\ m-(j-2)-k \\\end{pmatrix} \]

则此时的状态转移方程为:
\(f[i][j][k]+=f[i-1][j-2][k]*\begin{pmatrix} 2\\ m-(j-2)-k \\\end{pmatrix}\)

2°当都选择已经放置一个棋子的列时

由第 \(i-1\) 行,有 \(j+2\) 列放置了一个棋子且有 \(k-2\) 列放置了两个棋子的方案数转移过来,此时共有 \(j+2\) 个已经放置一个棋子的列,而要放置两个棋子则选择数为

\[\begin{pmatrix} 2\\ j+2 \\\end{pmatrix} \]

则此时的状态转移方程为:
\(f[i][j][k]+=f[i-1][j+2][k-2]*\begin{pmatrix} 2\\ j+2 \\\end{pmatrix}\)

3°当一个棋子选择空列,另一个棋子选择已经放置一个棋子的列时

由第 \(i-1\) 行,有 \(j\) 列放置了一个棋子且有 \(k-1\) 列放置了两个棋子的方案数转移过来,此时共有 \(m-j-(k-1)\) 个空列和 \(j\) 个已经放置一个棋子的列,故选择数为 \(j*(m-j-(k-1)))\)
则此时的状态转移方程为:
\(f[i][j][k]+=f[i-1][j-2][k]*j*(m-j-(k-1))\)

综上,我们得到完整的状态转移方程:

1°一个也不选:\(f[i][j][k]=f[i-1][j][k]\)
2°只选一个棋子:\(\begin{cases}f[i][j][k]+=f[i-1][j-1][k]*(m-(j-1)-k) & 选择空列\\f[i][j][k]+=f[i-1][j+1][k-1]*(j+1) & 选择已经有一个棋子的列\end{cases}\)
3°选择两个棋子:\(\begin{cases}f[i][j][k]+=f[i-1][j-2][k]*\begin{pmatrix} 2\\ m-(j-2)-k \\\end{pmatrix} & 都选择空列\\f[i][j][k]+=f[i-1][j+2][k-2]*\begin{pmatrix} 2\\ j+2 \\\end{pmatrix} & 都选择已经有一个棋子的列\\f[i][j][k]+=f[i-1][j-2][k]*j*(m-j-(k-1)) & 一个棋子选择空列,另一个棋子选择已经放置一个棋子的列\end{cases}\)
最后开始状态为 \(f[0][0][0]=1\) ,因为如果不放棋子的话也算一种方案,最终答案为 $$\sum_{i=0,j=0}^{m}f[n][i][j]$$,最后别忘记结果要 \(\bmod 9999973\)

代码如下:

http://www.hskmm.com/?act=detail&tid=28658

相关文章:

  • 一种智能调度分布式路径计算解决方案
  • 使用 C++ 和 minizip 实现 ZIP 压缩解压工具
  • 一看就懂,Oracle认证体系中的OCP中级认证
  • 2025 年试验机生产厂家最新推荐榜单:聚焦优质企业,助力精准选购高低温等各类试验设备弹簧拉压/弹簧疲劳/高频弹簧疲劳/U型弹簧专用试验机厂家推荐
  • IIS/如何查看IIS上部署网站的实时连接数
  • 拼叨叨砍价系统:实体店低成本引流的营销利器
  • 2025 自动门生产厂家最新推荐榜:权威筛选优质品牌,含选购指南与实力厂家深度解析
  • 医德出诊排班挂号管理系统:医院高效运营与便民服务的智能解决方案
  • 一佳教育培训课程系统小程序:一站式教育数字化解决方案
  • Supabase:无需后端代码的 Web 开发完整解决方案
  • Halo RAG!
  • SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
  • 2025 木饰面源头厂家最新推荐榜单:21 年标杆企业领衔,背景墙/全屋 /格栅/碳晶板全品类最新推荐及选购指南
  • 2025 年北京市管道疏通公司最新推荐排行榜:覆盖多城区、高压技术赋能的优质企业优选榜单西城区/朝阳区/丰台区/石景山/海淀区管道疏通公司推荐
  • 2025 年北京市清理化粪池公司最新推荐排行榜:聚焦高压技术与全城服务的权威甄选朝阳区/丰台区/海淀区/通州区清理化粪池厂家推荐
  • 报表方案Stimulsoft 2025.4 重磅发布!新增AI报表助手、C#脚本支持、全新图表类型等多项功能!
  • Prometheus的Exporter的数据采集机制
  • 2025 年珠三角 / 中山 / 东莞 / 佛山厂房出售公司推荐:中创集团产业生态型厂房的价值与服务解析
  • CTFshow-web方向(更新中)
  • 拷贝和上传文件,涉及隐私协议
  • 2025储罐厂家,钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐各类型最新推荐榜:品质卓越与技术创新的行业先锋!
  • 2025 年国内标志牌生产厂家最新推荐排行榜:聚焦优质企业助力客户精准选择道路/限速/公路/施工/警示/限高/三角/安全标志牌厂家推荐
  • 在Scala中,如何在泛型类中使用类型参数?
  • Maple 2025 来了!AI 赋能 + 6000 + 命令,破解数学计算、科研与教学痛点
  • 2025 护眼灯生产厂家最新推荐榜:精选五强资深与新锐品牌,深度解析品质口碑与选购指南
  • 2025 年护眼吸顶灯最新推荐榜:权威筛选五强品牌,技术与口碑双维度深度剖析
  • 2025 护眼台灯厂家最新推荐榜单:权威解析明可达等五强品牌,护眼参数与选购指南全攻略
  • 2025 年无线耳机源头厂家最新推荐榜单:覆盖头戴式 / 电竞 / 平价 / 电脑 / 游戏多品类且聚焦全产业链与精益制造的权威名录
  • 2025 年最新蓝牙耳机源头厂家口碑推荐榜:含琉璃 X 热销 64 万台企业及各类型高性价比品牌优选运动/真无线/头戴式/骨传导/游戏蓝牙耳机厂家推荐
  • 接口测试全流程实战:从工具到架构的深度解析