【题目描述】
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。
【样例输入】
3 2
【样例输出】
16
【解题思路】
本题为SCOI2005的题,正解应该是状态压缩动态规划,把所有方案变为二进制存储,1为该位置摆放了国王,0为没有,因为一行最多九个格子,也就是说最多为511,空间上完全可以接受。然后我们可以先预处理一下所有可行的国王摆放的位置,以减少动规的次数,设f[i,j,k]为现在是第i行,用第j种方案,一共摆放了k个国王的总方案数,那么我们动规的条件就是f[i,j,k]=∑f[i-1,s,t]{s为与j不冲突的方案,t<=k}
于是对于每个可行方案,我们需要记录一些东西:这个可行方案摆了多少国王,这个可行方案的攻击范围。那么满足条件的s即为s and j=0。
【代码实现】
1 type rec=record 2 j,l,p:longint; 3 end; 4 var f:array[1..9,0..512,0..80] of int64; 5 n,m,i,j,w,k,q,total,l:longint; 6 ans:int64; 7 fl:boolean; 8 fa:array[1..500] of rec; 9 procedure dfs(w,dep,t:longint); 10 var i:longint; 11 s:string; 12 ch:string;