BZOJ 1087: [SCOI2005]互不侵犯King 状态压缩 题解
来源:互联网 发布:java 两个类互相引用 编辑:程序博客网 时间:2024/06/03 14:55
Problem 1087. – [SCOI2005]互不侵犯King
1087: [SCOI2005]互不侵犯King
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4028 Solved: 2338
[Submit][Status][Discuss]
Description
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上
左下右上右下八个方向上附近的各一个格子,共8个格子。
Input
只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)
Output
方案数。
Sample Input
3 2
Sample Output
16
HINT
Source
HOME
Back
而且貌似是一道状压的经典题
我们定义
状态转移方程也很好想,对于前一行的一种状态,如果我们可以转移到当前行的状态的话,有
其中
我们还需要考虑如何预处理出每一行可以放的状态以及一种状态是否也可以转移到另一种状态,这个看代码应该就可以看懂了
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>#include<map>#include<set>const int MAXN=100+10;const int MINN=10+1;using namespace std;int readin(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}bool judge[MAXN][MAXN];int zip[MAXN],siz[MAXN],tail;long long f[MINN][MAXN][MAXN];int m,k;void dfs(int num,int pos,int val){ zip[++tail]=val; siz[tail]=num; if(num>=k||num>=((m+1)>>1)) return; for(register int i=pos+2;i<=m;i++) dfs(num+1,i,val+(1<<(i-1)));}int main(){ //freopen(".txt","r",stdin); //freopen(".out","w",stdout); m=readin();k=readin(); dfs(0,-1,0); for(register int i=1;i<=tail;i++){ for(register int j=1;j<=tail;j++){ if(zip[i]&zip[j]||(zip[i]<<1)&zip[j]||(zip[i]>>1)&zip[j]) judge[i][j]=judge[j][i]=false; else judge[i][j]=judge[j][i]=true; } } for(register int i=1;i<=tail;i++) f[1][siz[i]][i]=1ll; for(register int i=2;i<=m;i++){ for(register int j=0;j<=k;j++){ for(register int last=1;last<=tail;last++){ if (siz[last]>j) continue; for(register int now=1;now<=tail;now++){ if(judge[last][now]&&siz[last]+siz[now]<=j) f[i][j][now]+=f[i-1][j-siz[now]][last]; } } } } long long final=0; for(register int i=1;i<=tail;i++) final+=f[m][k][i]; printf("%lld\n",final); return 0;}
阅读全文
0 1
- BZOJ 1087: [SCOI2005]互不侵犯King 状态压缩 题解
- BZOJ 状态压缩dp 1087: [SCOI2005]互不侵犯King
- BZOJ题目1087: [SCOI2005]互不侵犯King(状态压缩DP)
- [BZOJ]1087: [SCOI2005]互不侵犯King 状态压缩DP
- [BZOJ 1087][SCOI2005]互不侵犯King:状态压缩DP
- bzoj 1087 [SCOI2005] 互不侵犯King 题解
- [BZOJ 1087][SCOI2005]互不侵犯King
- BZOJ 1087: [SCOI2005]互不侵犯King
- bzoj 1087 [SCOI2005]互不侵犯King
- 【BZOJ 1087】 [SCOI2005]互不侵犯King
- bzoj 1087: [SCOI2005]互不侵犯King
- 【BZOJ】1087【SCOI2005】互不侵犯King
- BZOJ 1087: [SCOI2005]互不侵犯King
- BZOJ 1087 [SCOI2005]互不侵犯King
- bzoj 1087 [SCOI2005]互不侵犯King
- BZOJ 1087 [SCOI2005]互不侵犯King
- BZOJ 1087: [SCOI2005]互不侵犯King
- BZOJ 1087 [SCOI2005] 互不侵犯King
- Flex 布局
- Dataguard网络优化调整
- 五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据库
- EasyUI—右键关闭选项卡
- 设计模式简介
- BZOJ 1087: [SCOI2005]互不侵犯King 状态压缩 题解
- IAR下STM32F103 Boot + APP的编程
- Python NLTK等环境配置安装
- Linux 关闭系统时间同步-timedatectl的使用
- 九度OJ-题目1168:字符串的查找删除-string的使用(转)
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- 音频重采样
- android 通过uri获取bitmap图片并压缩
- 点击图片,图片src重新加载(用于图片验证码)