洛谷P1896-互不侵犯(状压dp)

博客介绍了如何使用状态压缩动态规划(状压dp)解决洛谷P1896题目,即在N×N的棋盘上放置K个国王,使得他们互不攻击。通过将每行的棋子状态转换为二进制数,利用位运算简化状态转移,并分析了如何判断相邻位置是否存在冲突,最后提出递推公式和结束条件,阐述了状压dp在解决此类问题中的应用。
摘要由CSDN通过智能技术生成

题意:洛谷P1896

N × N N×N N×N的棋盘里面放 K K K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 8 8 8个格子。 ( N &lt; = 9 , K &lt; = N ∗ N ) (N&lt;=9,K&lt;=N*N) (N<=9,K<=NN)

分析:

首先暴搜肯定被否定,时间复杂度是指数级的,所以我们就可用上状态压缩 d p dp dp啦。

那什么是状态压缩?在这题中按照我的理解就是将一行的所有摆放状态看成不同的 01 01 01,然后将这些 01 01 01串看成二进制数,这样每一个摆放状态就有一个 01 串 01串 01(二进制数)与其对应。
假设 1 1 1行有 4 4 4个格子,我们在第 1 、 3 1、3 13个格子放棋子, 2 、 4 2、4 24不放棋子,然后我们定义一个 01 01 01 ′ 1 ′ &#x27;1&#x27;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值