【ssl1382】车【状压DP】

Description

在n*n(n≤20)的方格棋盘上放置n个车(可以攻击所在行、列),有些格子不能放,求使它们不能互相攻击的方案总数。

Input

第一行为棋盘的大小n
第二行为障碍的数量m
第三行到第m+3为m个障碍

Output

总数

Sample Input

4
2
1 1
2 2

Sample Output

14

分析

状压DP还是比较难理解的知识点,很难检查,做的心态有点崩。

状态的表示是基于2进制的,用位运算去计算枚举和转移。p数组存的是2的n次方,二进制中的类似100…0的数。f数组就是存转移,初始化为1。

我们把每行压缩成一个二进制数,这样障碍直接可表示为:
a [ x ] + = n u m [ y − 1 ] a[x]+=num[y−1] a[x]+=num[y1](a[x] 是存障碍的数组)
这样1表示有障碍,0表示无障碍。

然后枚举 f [ i ]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值