【轮廓线DP,状压DP】BZOJ1087 [SCOI2005]互不侵犯King
来源:互联网 发布:ubuntu16.04安装python 编辑:程序博客网 时间:2024/06/05 19:43
题面在这里
轮廓线DP的经典题……
可以发现,对于当前点(i,j),只有前面n+1个格子与其有关(如下图)
那么这n+1个位置就是(i,j)的轮廓线。
把轮廓线上的状态用位运算压缩一下即可。
那么显然,若(i,j)不放王:
f[c][ss][k]+=f[c^1][s][k];
(ss是新轮廓线的状态)
若(i,j)放王,就要让(i-1,j-1)、(i-1,j)、(i-1,j+1)、(i,j-1)都没有王:
if (k<K&&check(i,j,s)) f[c][ss+1][k+1]+=f[c^1][s][k];
那么就完成了
附上代码:
#include<cstdio>#include<cstring>#define LL long longconst int maxs=1030,maxk=105;int n,K;LL f[2][maxs][maxk],ans=0;bool check(int i,int j,int s){ if (i>1&&j>1&&(s&(1<<n))) return 0; if (i>1&&(s&(1<<n-1))) return 0; if (i>1&&j<n&&(s&(1<<n-2))) return 0; if (j>1&&(s&1)) return 0; return 1;}int main(){ scanf("%d%d",&n,&K); int c=0;f[0][0][0]=1; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++){ c^=1;memset(f[c],0,sizeof(f[c])); for (int s=0;s<(1<<n+1);s++){ int ss=(s<<1)%(1<<n+1); for (int k=0;k<=K;k++){ f[c][ss][k]+=f[c^1][s][k]; if (k<K&&check(i,j,s)) f[c][ss+1][k+1]+=f[c^1][s][k]; } } } for (int s=0;s<(1<<n+1);s++) ans+=f[c][s][K]; printf("%lld",ans); return 0;}
阅读全文
2 0
- 【轮廓线DP,状压DP】BZOJ1087 [SCOI2005]互不侵犯King
- 【浅谈轮廓线DP】BZOJ1087(SCOI2005)[互不侵犯King]题解
- 【BZOJ1087】【SCOI2005】【互不侵犯king】【状压dp】
- 【bzoj1087】[SCOI2005]互不侵犯King 状压DP
- [BZOJ1087][SCOI2005]互不侵犯King(状压dp)
- BZOJ1087: [SCOI2005]互不侵犯King 状压DP
- [BZOJ1087][SCOI2005][状压DP]互不侵犯King
- 【BZOJ1087】【SCOI2005】互不侵犯King(状压dp)
- BZOJ1087: [SCOI2005]互不侵犯King 题解【DP】【状压】
- bzoj1087 [SCOI2005]互不侵犯King(状压dp)
- [bzoj1087]: [SCOI2005]互不侵犯King(状压dp)
- bzoj1087[SCOI2005][互不侵犯King] 状压DP
- BZOJ1087 [SCOI2005]互不侵犯King 状压DP
- BZOJ1087(SCOI2005)[互不侵犯King]--状压DP
- BZOJ1087 [SCOI2005]互不侵犯King 状压dp
- bzoj1087: [SCOI2005]互不侵犯King 压状dp
- [bzoj1087][scoi2005][DP][状态压缩]互不侵犯King
- BZOJ1087 [SCOI2005]互不侵犯King 状态压缩DP
- I/O
- 后缀数组——bzoj 1031: [JSOI2007]字符加密Cipher
- Robot Framework: 自定义自己的python库
- linux C调试接口
- [bzoj2243][SDOI2011]染色
- 【轮廓线DP,状压DP】BZOJ1087 [SCOI2005]互不侵犯King
- WebRTC视频JitterBuff
- poj 2488 dfs
- POJ 1986 Distance Queries 笔记
- Android开发中那些让你相见恨晚的方法、类或接口
- jquery中$.cookie()的使用
- Kotlin在Android上令人惊叹的技巧
- 分治算法之二分查找
- WebSocket API总结