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

P1896 [SCOI2005] 互不侵犯小总结

P1896 [SCOI2005] 互不侵犯

P1896 [SCOI2005] 互不侵犯

题目描述

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

输入格式

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

输出格式

所得的方案数

输入输出样例 #1

输入 #1

3 2

输出 #1

16

说明/提示

数据范围及约定

对于全部数据,\(1 \le N \le 9\)\(0 \le K \le N\times N\)


\(\text{upd 2018.4.25}\):数据有加强。

呃,没什么好说的直接上错误代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int dp[10][82][1<<9];
int num[1<<9];//每个状态的1的个数 
int chse[1<<9];//每一行可选择的状态集合有哪些 
int tot=0;
int add(int s){//s在二进制下的1的个数 int cnt=0;while(s){if(s&1) cnt++;s>>=1;}return cnt;
}
signed main(){cin>>n>>k;for(int i=0;i<(1<<n);i++){num[i]=add(i);if(i&(i<<1)==0&&i&(i>>1)==0){chse[++tot]=i;}}dp[0][0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=k;j++){for(int x=1;x<=tot;x++){int s=chse[x];if(num[s]>j) continue; for(int y=1;y<=tot;y++){int t=chse[y];if(s&(t<<1)==0&&s&(t>>1)==0&&s&t==0){if(j-num[t]>=0){dp[i][j][t]+=dp[i-1][j-num[t]][s];}}} }}}int ans=0;for(int i=1;i<=tot;i++){ans+=dp[n][k][chse[i]];}cout<<ans;return 0;
} 

让我们猜猜错误在哪

错在位运算优先级

image

正确代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int dp[10][82][1<<9];
int num[1<<9];//每个状态的1的个数 
int chse[1<<9];//每一行可选择的状态集合有哪些 
int tot=0;
int add(int s){//s在二进制下的1的个数 int cnt=0;while(s){if(s&1) cnt++;s>>=1;}return cnt;
}
signed main(){cin>>n>>k;for(int i=0;i<(1<<n);i++){num[i]=add(i);if((i&(i<<1))==0&&(i&(i>>1))==0){chse[++tot]=i;}}dp[0][0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=k;j++){for(int x=1;x<=tot;x++){int s=chse[x];if(num[s]>j) continue; for(int y=1;y<=tot;y++){int t=chse[y];if((s&(t<<1))==0&&(s&(t>>1))==0&&(s&t)==0){if(j-num[t]>=0){dp[i][j][t]+=dp[i-1][j-num[t]][s];}}} }}}int ans=0;for(int i=1;i<=tot;i++){ans+=dp[n][k][chse[i]];}cout<<ans;return 0;
} 

关于两个初始化

我认为的初始化
for(int i=0;i<=n;i++){for(int t=0;t<(1<<n);t++){dp[i][0][t]=1;}}
正确的初始化
dp[0][0][0]=1;

那么为什么我的初始化会错呢?

image

在计数dp下,注意答案会被重复计算

http://www.zskr.cn/news/19186.html

相关文章:

  • 2025-10-11?
  • AI如何改变芯片设计
  • 好玩热门的switch游戏推荐【PC+安卓】塞尔达传说:王国之泪|v1.4.2整合版|官方中文| 附switch模拟器
  • C 基础教程
  • 实用指南:《新能源汽车故障诊断与排除》数字课程资源包开发说明
  • 阅读和提问作业1:《构建之法》提问
  • Selenium+python自动化1-环境搭建 - 实践
  • 初四夜间/休息日安排
  • 实用指南:新能源知识库(115)9月发布的《关于推进能源装备高质量发展的指导意见》的摘要整理
  • 谈程序员如何做好业务
  • 10.11 CSP-S模拟29 改题记录
  • 2025 年 10 月 8 日 语文作业
  • 001 初识编程
  • UnitTask中的Forget()与 CTS
  • 12 种 Pandas 测试技巧,让数据处理少踩坑
  • 02020506 EF Core高级06-EF Core批量删除更新插入、全局筛选器、软删除、全局筛选的性能问题
  • 一种整理HTML和JS代码的方法
  • 元推理框架,是人类文明的《神农本草经》,源于自指自洽的觉悟与洗礼
  • 【程序员必看】MySQL数据类型全解析:选错类型性能直接掉80%!
  • 2025环氧地坪漆厂家推荐:常州新禾,品质保证施工无忧!
  • 2025家居ERP推荐:赛思软件助力企业高效管理!
  • 2025彩钢瓦保养优质厂家推荐,江苏承优建筑工程专业服务!
  • 2025磁力泵加工厂推荐中正化工,专业定制高效耐用产品!
  • 2025双氧水供应厂家推荐:苏州市岚昱化工品质卓越选择!
  • 2025上海保洁公司最新推荐榜:高效清洁与贴心服务的优质选择
  • 2025书包柜定做厂家推荐:杰尚家具专业定制,品质卓越!
  • 打不动十个
  • 2025拉伸器厂家最新推荐榜:专业制造与优质服务的行业佼佼者
  • 2025氧化镁供应厂家推荐:松辽镁业高纯度优质选择!
  • 2025硅藻土订制厂家口碑推荐:品质卓越与专业服务的双重保障