2017.10.1 互不侵犯king 思考记录
2017-10-01 09:19
211 查看
、、没想到做的这么顺利
首先n<=⑨..
所以状压这个⑨
然后枚举状态转移累加即可
f【行数】【最上层排布情况】【已经用了几个】
最后 Σf【n】【i】【k】 0<=i<2^n 即是答案
注:long long
码:
首先n<=⑨..
所以状压这个⑨
然后枚举状态转移累加即可
f【行数】【最上层排布情况】【已经用了几个】
最后 Σf【n】【i】【k】 0<=i<2^n 即是答案
注:long long
码:
#include<iostream> #include<cstdio> #include<cmath> using namespace std; long long f[11][1050][180],er[55],K,i,j,n,l,ans,cnt,fa[1050],fags[1050],geshu,k; int main() { scanf("%lld%lld",&n,&K); //预处理 int sx=pow(2,n); er[0]=1; for(i=1;i<=9;i++) er[i]=er[i-1]*2; for(i=0;i<sx;i++) { if(!(i&(i<<1))&&!(i&(i>>1))) {geshu=0; for(j=0;j<=9;j++) { if(i&er[j])++geshu; } fa[++cnt]=i; fags[cnt]=geshu; } } f[0][0][0]=1; for(i=1;i<=n;i++) { for(j=1;j<=cnt;j++)//枚举上一个状态 for(k=0;k<=K;k++)//枚举上一个状态放的个数 { for(l=1;l<=cnt;l++) { if(!(fa[l]&fa[j])&&!(fa[l]&(fa[j]<<1))&&!(fa[l]&(fa[j]>>1))) { f[i][fa[l]][k+fags[l]]+=f[i-1][fa[j]][k]; } } } } for(i=1;i<=cnt;i++) { ans+=f [fa[i]][K]; } printf("%lld",ans); }
相关文章推荐
- [SCOI2005]互不侵犯king
- BZOJ 1087: [SCOI2005]互不侵犯King 状态压缩 题解
- BZOJ 1087: [SCOI2005]互不侵犯King | 状压DP
- bzoj1087[SCOI2005]互不侵犯King
- 【BZOJ】【P1087】【SCOI2005】【互不侵犯King】【状压DP】【题解】
- bzoj 1087: [SCOI2005]互不侵犯King【状压dp】
- 洛谷 P1896 [SCOI2005]互不侵犯King
- BZOJ 1087: [SCOI2005]互不侵犯King
- bzoj 1087: [SCOI2005]互不侵犯King
- bzoj1087: [SCOI2005]互不侵犯King
- [BZOJ1087][SCOI2005]互不侵犯King
- 洛谷P1896 [SCOI2005]互不侵犯King
- 【SCOI2005】【BZOJ1087】互不侵犯King
- BZOJ 1087: [SCOI2005]互不侵犯King
- [bzoj1087][SCOI2005]互不侵犯King题解
- 【状态压缩DP】BZOJ1087-[SCOI2005]互不侵犯King
- BZOJ 1087 互不侵犯king
- 2017.10.1 atcoder TK1 D 思考记录
- BZOJ 1087 SCOI2005 互不侵犯King 状压DP
- 【58.75%】【BZOJ 1087】[SCOI2005]互不侵犯King