组合计数·棋盘统计

相关习题:

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。

转载于:https://www.cnblogs.com/astoninfer/p/5746342.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值