众所周知,“八皇后” 问题是求解在国际象棋棋盘上摆放 88 个皇后,使得两两之间互不攻击的方案数。
已经学习了很多算法的小蓝觉得 “八皇后” 问题太简单了,意犹未尽。作为一个国际象棋迷,他想研究在 N×MN×M 的棋盘上,摆放 KK 个马,使得两两之间互不攻击有多少种摆放方案。
由于方案数可能很大,只需计算答案除以 10000000071000000007 (即 109+7109+7) 的余数。
如下图所示,国际象棋中的马摆放在棋盘的方格内,走 “日” 字,位于 (x,y)(x,y) 格的马(第 xx 行第 yy 列)可以攻击 (x+1,y+2)(x+1,y+2)、(x+1,y−2)(x+1,y−2)、(x−1,y+2)(x−1,y+2)、(x−1,y−2)(x−1,y−2)、(x+2,y+1)(x+2,y+1)、(x+2,y−1)(x+2,y−1)、(x−2,y+1)(x−2,y+1) 和 (x−2,y−1)(x−2,y−1) 共 88 个格子。
输入格式
输入一行包含三个正整数 N,M,KN,M,K,分别表示棋盘的行数、列数和马的个数。
输出格式
输出一个整数,表示摆放的方案数除以 10000000071000000007 (即 109+7109+7) 的余数。
数据范围
对于 5%5% 的评测用例,K=1K=1;
对于另外 10%10% 的评测用例,K=2K=2;
Acwing--3494. 国际象棋(状态压缩dp)
最新推荐文章于 2024-06-27 14:00:00 发布
这是一个关于解决棋盘问题的算法实现,具体是计算在N×M的棋盘上放置K个马,使得它们互不攻击的方案数量。通过动态规划和位运算来剪枝,减少了计算复杂性。程序给出了输入输出示例,并对关键函数lowbit进行了说明,该函数用于计算二进制中1的个数,对应马的增加数量。


最低0.47元/天 解锁文章
332

被折叠的 条评论
为什么被折叠?



