当前位置: 首页 > 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.hskmm.com/?act=detail&tid=29024

相关文章:

  • 美国能源部《生成式人工智能参考指南》解读
  • 分析InfluxDB中读取时CPU飙升
  • win10系统访问smb服务时提示密码错误
  • 《小说课》读书笔记
  • 2025-10-11?
  • 高二停课周记(信息学竞赛) Week1
  • AtCoder Beginner Contest 427 ABCDEF 题目解析
  • zju博士资格考试考前复习(微分方程方向)ode 部分
  • 测试一下博客功能
  • AI如何改变芯片设计
  • NOIP 2024
  • 2025/10/11
  • 好玩热门的switch游戏推荐【PC+安卓】塞尔达传说:王国之泪|v1.4.2整合版|官方中文| 附switch模拟器
  • 十年运维工程师总结
  • 运动控制教学——5分钟学会Dijkstra与A*搜索算法!(附仿真视频及代码) - 教程
  • ffplay数据结构解析
  • CNN 发展历程
  • FileX和ThreadX精简版
  • ue4素材场景 - MKT
  • 阅读《构建之法》的思考与问题
  • 实验报告5(链栈基本操作,数制转换,匹配算法,伴舞问题)
  • 阅读和提问作业1:《构建之法》提问
  • 企业推行OKR中层领导关注的10个关键问题及解决方案
  • 初四夜间/休息日安排
  • AWS自然语言处理技术实战指南
  • 多线程
  • 三级模式
  • abc427
  • 20232320 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • [HarekazeCTF2019]baby_rop2