bzoj1087: [SCOI2005]互不侵犯King(状态压缩+Dp)
来源:互联网 发布:淘宝豆豆菲全球美妆 编辑:程序博客网 时间:2024/05/16 23:01
题目传送门
好久之前学的状态压缩现在都差不多忘了。。
解法:
硬搞的话应该很难吧。
所以用状态压缩来优化一下咯。
因为一行最多才9个点。每个点要么没要么有。
那么每一行最多有2^9种状态。
用1表示有国王,用0表示没国王。
这样我们就可以用二进制来表示每一行的状态。
那么怎么判断每一行的状态合不合法呢?
每个国王左右都是不能有国王的。
也就是每个1左右都不能有1。
那么我把整个状态往左移一位,这样如果不合法的话就会出现在相同位置有1。
所以与一下就OK了。
然后怎么继承上一行状态呢。
其实也差不多。
也是左右移判断。
不细讲了没空啊。
#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;int n,K;int t[610]; //t[i]表示i状态有多少个1int len,s[610]; //s存有用的状态(合法)ll f[11][610][110]; //f[i][j][k]表示第i行填j状态,填完后前i行有k个国王有多少种方案int main() { scanf("%d%d",&n,&K); for(int i=1;i<=600;i++) { int x=i;t[i]=0; while(x!=0) { if(x%2==1) t[i]++; //求i有多少个1 x/=2; } } len=0; int ss=1; for(int i=1;i<=n;i++) ss*=2; for(int i=0;i<=ss-1;i++) //0也是一个状态哦。 if((i&(i*2))==0) s[++len]=i; //记录一下有用状态 for(int i=1;i<=len;i++) f[1][s[i]][t[s[i]]]=1; for(int i=2;i<=n+1;i++) for(int j=1;j<=len;j++) for(int k=1;k<=len;k++) if((s[j]&s[k])==0&&((s[j]*2)&s[k])==0&&((s[k]*2)&s[j])==0) //判断自己yy不详解 for(int l=K;l>=t[s[j]];l--) f[i][s[j]][l]+=f[i-1][s[k]][l-t[s[j]]]; //状态继承自己yy不祥解 printf("%lld\n",f[n+1][0][K]); //最后输出n+1行不填一共K个国王。 //也就是前n行填了K个国王。 return 0;}
阅读全文
0 0
- [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】互不侵犯King 状态压缩dp
- D 1087: [SCOI2005]互不侵犯King (状态压缩dp)
- BZOJ题目1087: [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】【状压】
- bzoj1087[SCOI2005][互不侵犯King] 状压DP
- BZOJ1087 [SCOI2005]互不侵犯King 状压DP
- 二分法查找
- 【二十六】CSDN博客栏目编辑
- ArcGIS API for JavaScript 4.5版和3.22版发布了
- java设计模式(十四)——观察者模式(Observer)
- 240. Search a 2D Matrix II
- bzoj1087: [SCOI2005]互不侵犯King(状态压缩+Dp)
- 百度推出MIP Shell链接MIP URL以及 MIP-Shell UR
- 【Java】获取当前方法的方法名
- python 异常
- redis启动
- mysql中对null值字段的查询
- EMC市场调查揭示中国大数据应用趋势
- 总结c语言操作符
- LoadRunner常见问题总结