当前位置: 首页 > news >正文

题解:洛谷 P1896 [SCOI2005] 互不侵犯

【题目来源】

洛谷:P1896 [SCOI2005] 互不侵犯 - 洛谷

【题目描述】

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

【输入】

只有一行,包含两个数 \(N,K\)

【输出】

所得的方案数

【输入样例】

3 2

【输出样例】

16

【算法标签】

《洛谷 P1896 互不侵犯》 #动态规划DP# #深度优先搜索DFS# #轮廓线DP# #状压DP# #各省省选# #2005# #四川#

【代码详解】

// 引入所有标准库头文件,方便使用各种标准库功能
#include <bits/stdc++.h>// 使用标准命名空间,避免每次使用标准库函数时都需要加 std:: 前缀
using namespace std;// 定义全局变量
int n, k;                      // n: 棋盘的行数,k: 需要放置的国王数量
long long f[9][1 << 9][82];    // f[i][st][j]: 动态规划数组,表示前i行状态为st且已放置j个国王的方案数
long long ans;                 // ans: 存储最终结果// 计算状态st中1的个数(即该状态放置的国王数量)
int c(int st)
{int cnt = 0;while (st){if (st % 2){cnt++;}st /= 2;}return cnt;
}// 检查状态st是否合法(即没有相邻的1)
bool check1(int st)
{for (int i = 0; i + 1 < n; i++){if ((st & (1 << i)) && (st & (1 << (i + 1)))){return false;}}return true;
}// 检查状态st和st2是否可以相邻(即没有相邻或重叠的1)
bool check2(int st, int st2)
{for (int i = 0; i < n; i++){if (st & (1 << i)){if (st2 & (1 << i)){return false;}else if (i + 1 < n && (st2 & (1 << (i + 1)))){return false;}else if (i - 1 >= 0 && (st2 & (1 << (i - 1)))){return false;}}}return true;
}// 主函数,程序的入口点
int main()
{// 读取输入数据:n(棋盘行数),k(需要放置的国王数量)cin >> n >> k;// 初始化动态规划数组ffor (int i = 0; i < n; i++){for (int st = 0; st < (1 << n); st++){// 如果状态st不合法,跳过if (!check1(st)){continue;}// 如果是第一行,初始化f[0][st][c(st)]为1if (i == 0){f[i][st][c(st)] = 1;}else{// 遍历所有可能的已放置国王数量jfor (int j = c(st); j <= k; j++){// 遍历所有可能的前一行状态st2for (int st2 = 0; st2 < (1 << n); st2++){// 如果状态st2不合法或与st冲突,跳过if (!check1(st2) || !check2(st, st2)){continue;}// 状态转移:f[i][st][j] += f[i-1][st2][j-c(st)]f[i][st][j] += f[i - 1][st2][j - c(st)];}}}}}// 统计所有合法状态的总方案数for (int st = 0; st < (1 << n); st++){ans += f[n - 1][st][k];}// 输出最终结果cout << ans << endl;// 程序正常结束,返回0return 0;
}

【运行结果】

3 2
16
http://www.jsqmd.com/news/397122/

相关文章:

  • 直通上海智推时代:官方联络通道一站式汇总 - 速递信息
  • AI写作后如何添加个人观点让论文更真实?降AI的终极心法
  • 题解:洛谷 P2014 [CTSC1997] 选课
  • 武汉疆灵科技:深耕低空经济 打造无人机,具身智能人形机器人载人无人驾驶航空器维修与维修人才技能培训全国标杆 - 速递信息
  • 精准对接上海智推时代:官方沟通入口全收 - 速递信息
  • 题解:洛谷 P1063 [NOIP 2006 提高组] 能量项链
  • 动态中位数
  • 题解:洛谷 P2015 二叉苹果树
  • Solution - P4241 采摘毒瘤
  • 题解:洛谷 P1352 没有上司的舞会
  • 使用iOS安全API进行数据加密、解密、签名与验证完整指南
  • 题解:洛谷 P1070 [NOIP 2009 普及组] 道路游戏
  • 如何修复 Chrome Devtools Console 中无法粘贴代码的问题 All In One
  • Trae和Trae团队和Trae技术
  • 题解:洛谷 P1880 [NOI1995] 石子合并
  • COMSOL 隧道断层突水案例探究:不同开挖步数下的围岩奥秘
  • 题解:洛谷 P1435 [IOI 2000] 回文字串
  • Java 时间类(中):JDK8 全新时间 API 详细教程
  • 降AI率常见误区TOP10:别再走弯路了!2026年最全避坑指南
  • <P5464 缩小社交圈>
  • 支持实时预览与高质量导出的专业封面设计工具,完全免费:西瓜封面设计
  • 文科论文降AI比理工科更难?文科生专属降AI方案全解析
  • 题解:洛谷 P1541 [NOIP 2010 提高组] 乌龟棋
  • PEM 电解槽直流道两相流模拟:从建模到求解
  • 手把手教你使用vscode开发stm32!
  • 题解:洛谷 P1854 [IOI 1999] 花店橱窗布置
  • 题解:洛谷 P4310 绝世好题
  • 中华民族音乐传承出版工程服务平台界面设计
  • 用DeepSeek写的论文怎么降AI率?2026最新实操教程手把手教你
  • 2026毕业季降AI全攻略:从论文写作到最终提交一站式指南