【SSL1382】车

在不超过20x20的棋盘上,有障碍格子,需放置相同数量的车,使得车无法互相攻击。通过输入棋盘大小、障碍数量及障碍位置,计算所有可能的放置方案总数。采用状压DP降低维度,用二进制表示行障碍状态,并进行状态转移计算。代码实现枚举状态并进行转移操作,避免车之间的攻击。
摘要由CSDN通过智能技术生成

Description

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

Input

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

Output

总数

Sample Input

4
2
1 1
2 2

Sample Output

14

思路:

我们可以设 f [ i ] [ j ] f[i][j] f[i][j]为当前第 i , j i,j i,j这个位置放的答案,虽然这样可行,但我们想到可以优化,那就是状压DP
状压DP就是把维数降一,把其中一维用二进制表示,转换成十进制存到数组里
那我们思考这道题怎么状压
我们用 a a a数组表示这一行障碍的状态,则它的转移就是
a [ x ] + = p o w [ y − 1 ] a[x]+=pow_[y-1] a[x]+

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值