组合计数·棋盘统计

相关习题:

1. Uva 10237 Bishops

题意:两个象不攻击,当且仅当它们不处在同一条斜线上。输入整数$n(n \leq 30)$,统计在一个$n \times n$的棋盘上放$k$个互不攻击的象有多少种方法。如$N=8, k = 6$时有$5599888$种。

 

分析:解决本题需要注意两个事实:

1.在棋盘上着色(如上图)不同的位置互不相干,因此可以独立处理。

2.每个放置象的位置独占某一列(对角线意义上)和某一行。

因此可初步得到如下的状态转移方程,用$dp(i, j)$表示在前$i$行(第$i$行有$l(i)$个棋格,假设$l(i)$严格对称递增)共放置$j$个象的方案数:

$dp(i, j) = dp(i - 1, j - 1) * (l(i) - j + 1) + dp(i, j)$其中$+$号左边表示在第$i$行放置一个象,右边表示不放。

只需要对奇数列和偶数列(行的长度)分别计算$dp$数组,最后用乘法合并成一个方格棋盘。对于本题至于将前半部分和后半部分相邻处理即可dp。

posted @ 2016-08-07 15:43  astoninfer  阅读(259)  评论(0编辑  收藏  举报