【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)

http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087

状压dp是第一次写啊,我也是才学TAT。状压dp一般都用一个值表示集合作为dp的一个状态,然后根据集合和dp的性质转移。通常用于啥啥啥。。。。。

我引用些吧

我们知道,用DP解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态。但是有这样的一些题目,它们具有DP问题的特性,但是 状态中所包含的信息过多,如果要用数组来保存状态的话需要四维以上的数组。于是,我们就需要通过状态压缩来保存状态,而使用状态压缩来保存状态的DP就叫 做状态压缩DP。

回到此题:

设状态f[i][j][k]表示前i行放j个国王且在第i行放置国王的情况为k时的方案数

f[i][j][k]=sum{ f[i-1][j-cnt[x]][x] | x为所有不与k互斥的放置情况,cnt[x]为放置为x时国王的数量 }

 

 


 

 

Description

在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。

Input

只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)

Output

方案数。

Sample Input

3 2

Sample Output

16

HINT

Source

posted @   iwtwiioi  阅读(452)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示