ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[AHOI2009]中国象棋(计数dp)

2021-07-26 15:32:43  阅读:244  来源: 互联网

标签:中国象棋 两个 AHOI2009 放在 一个 棋子 放置 列放 dp


题意

给定 \(n\) 行 \(m\) 列的棋盘,要求放若干个炮(可以是 \(0\) 个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。\((n, m\le 100)\)

题解

依次考虑每一行放哪些棋子,显然每一行最多放两个,所以可以讨论这 \(0\) ~ \(2\) 个棋子放置的位置。

而其实只需要知道这两个棋子放在了“已经有一个棋子”,“有两个棋子”,“没有棋子”中的哪一种列上。因为如果两种放置方法放在了相同种类的列上,那这两种放置方法就是等价的。

所以可以设 \(f_{i,j,k}\) 表示前 \(i\) 行有 \(j\) 列放了 \(1\) 个,\(k\) 列放了 \(2\) 个(则剩下 \(m-j-k\) 列都放了 \(0\) 个)的方案数。

讨论当前棋子的放置

讨论当前棋子的放置,先自己思考,点击可查看答案
  1. 不放,\(f_{i+1,j,k}\) += \(f_{i,j,k}\)
  2. 放一个
    • 放在没有棋子的列,\(f_{i+1,j+1,k}\) += \(f_{i,j,k}*(m-j-k)\)
    • 放在一个棋子的列,\(f_{i+1,j-1,k+1}+=f_{i,j,k}*j\)
    • 放在两个棋子的列,在想啥嘞不能放在两个棋子的列
  3. 放两个
    • 一个+一个,\(f_{i+1,j-2,k+2}\) += \(f_{i,j,k}*C_j^2\)
    • 一个+没有,\(f_{i+1,j,k+1}\) += \(f_{i,j,k}*j*(m-j-k)\)
    • 没有+没有,

标签:中国象棋,两个,AHOI2009,放在,一个,棋子,放置,列放,dp
来源: https://www.cnblogs.com/hzy1/p/15061660.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有