题目链接

  真是可恶,被数据范围坑了一把。想要一遍AC的希望破灭了……

  以后大家在做状压DP的时候一定要开long long……

  设f[i][j][k]表示考虑前i行,总共放了j个King,第i行状态为k时的方案数。

  先统计出k的二进制位有多少1,记为len,然后枚举o(1~(1<<n)-1),则状态转移方程有:

  f[i][j][l]+=f[i-1][j-len][o];

  注意判断两个状态是否合法。

  j&(j>>1)不行,o&j不行,(o>>1)&j不行,(o<<1)&j也不行。当然o&(o>>1)更不行。

  最后累计答案。

  代码如下

  

#include<cstdio>
#include<cctype>
inline long long read(){long long num=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')    f=-1;ch=getchar();}while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}return num*f;
}long long f[10][101][600];
inline int getlen(long long x){int ans=0;bool s;while(x){if(x&1)    ans++;x>>=1;}return ans;
}long long Max;
long long ans;inline bool check(long long x,long long y){if(x&y)    return 1;if((x>>1)&y)    return 1;if((x<<1)&y)    return 1;return 0;
}int main(){f[0][0][0]=1;int n=read(),k=read();Max=(1<<n)-1;for(int i=1;i<=n;++i)for(int j=0;j<=k;++j)for(int l=0;l<=Max;++l){int len=getlen(l);if(len>j)        continue;if(l&(l>>1))    continue;for(int o=0;o<=Max;++o){if(check(o,l))    continue;if(o&(o>>1))    continue;f[i][j][l]+=f[i-1][j-len][o];}}for(int i=0;i<=Max;++i)ans+=f[n][k][i];printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/cellular-automaton/p/7599864.html

【Luogu】P1896互不侵犯King(状压DP)相关推荐

  1. 洛谷P1896 互不侵犯【状压DP】

    题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案: #include<bits/stdc++.h> using namespace ...

  2. BZOJ 1087 SCOI2005 互不侵犯King 状压DP

    题目大意:给定n*n的国际象棋棋盘.在上面放k个国王,要求国王之间互不攻击.求方案数 n<=⑨ 状压DP.将每一行的方案二进制压成一维,令f[i][j][k]为第i行用去j个国王状态为k的方案数 ...

  3. BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP

    [题目分析] 沉迷水题,吃枣药丸. [代码] #include <cstdio> #include <cstring> #include <iostream> #i ...

  4. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  5. 【BZOJ1087】【codevs2451】互不侵犯,状压DP

    传送门1 传送门2 写在前面:第一次写状压DP,感觉还好,至少比数论好些,还有就是让我膜一发位运算-- 思路:一看数据范围n<=9而且是省选,就知道这个题九成是状态压缩,题目限制条件与上一行的摆 ...

  6. BZOJ 1087: [SCOI2005]互不侵犯King

    二次联通门 : BZOJ 1087: [SCOI2005]互不侵犯King /*BZOJ 1087: [SCOI2005]互不侵犯King状压dp将每一行棋子的存在状态压成一个整数f[i][j][k] ...

  7. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  8. poj3254/洛谷P1896 状压dp

    http://poj.org/problem?id=3254 https://www.luogu.org/problemnew/show/P1896 把这两题放在一起,解题思路差不多.以POJ的为例 ...

  9. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4042 (Luogu) https://www.luogu.org/prob ...

最新文章

  1. 杨百万建议股民可以从以下几个方面进行
  2. 配置apache虚拟host
  3. Linux命令行工具使用小贴士及技巧(四)
  4. top命令的使用查看进程占用
  5. pandas.DataFrame对根据某些列对某些列进行修改
  6. Linux云用户,Linux 用户与权限
  7. 聊聊论文分区,SCI,JCR,CCF分区你弄懂了吗?
  8. 10K 3435热敏电阻阻值表
  9. 90.精读《极客公园 2019》
  10. 2022智源大会议程公开 | 预训练大模型论坛
  11. 视频中的音频采样率就这样快速修改
  12. 杨慎的词------临江仙·滚滚长江东逝水
  13. img标签引入和背景图片引入雪碧图的使用
  14. 关于信息检索(IR)、搜索引擎的学与思
  15. 图文教程教您蓝底照片更换成白底和红底的方法
  16. 获取视频fps、总帧数
  17. activeMQ基础学习和SpringBoot整合activeMQ案例
  18. hash 算法 (转)
  19. Python PyQt4 文字朗读演示代码
  20. vivoxfold和华为matex2哪个值得买 两者配置对比

热门文章

  1. Linux各个文件夹的作用~~~非常实用!!
  2. 【BZOJ 3165】 [Heoi2013]Segment 李超线段树
  3. 在Delphi7中调试COM
  4. xcode 4.3 调试的时候显示汇编,怎么办
  5. Javascript 创建对象方法的总结
  6. 【BZOJ】1706: [usaco2007 Nov]relays 奶牛接力跑
  7. ESXI6.5 最新版尝鲜安装图解
  8. 利用java反射调用类的的私有方法--转
  9. linux 释放cache 内存
  10. Configuring Locales