去tm插头dp

数据范围这么,又要求,显然上dp

设\(f[i][j][k]\)表示放到第\(i\)行,总共放了\(j\)个那啥,第\(i\)行的格子状态为\(k\)的方案

先预处理出一行内状态的放置个数和格子状态,因为那啥占据周围一圈的格子,所以转移时前后两行格子状态没有交集的状态转移

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#define LL long long
#define il inline
#define re registerusing namespace std;
const LL mod=1000000007;
il LL rd()
{re LL x=0,w=1;re char ch;while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w;
}
LL nn,n,kk,f[10][85][1100],ans;
LL nu[1100],b[1100],tt; //nu是某个状态的棋子数量,b为相对应的格子状态
bool v[1100];
il void init(int i,int j,int k)
{if(v[k]) return;++tt;nu[tt]=j,b[tt]=k;v[k]=true;for(;i<=n;i++)init(i+2,j+1,k|(1<<(i-1))|(i<n?(1<<i):0));    //对于某个棋子所在行以及上(没什么用),下的行,棋子所在列和左边(没什么用),右边都被占了
}int main()
{freopen("xzz.in","r",stdin);freopen("xzz.out","w",stdout);n=rd(),kk=rd();nn=1<<n;init(1,0,0);for(int i=1;i<=tt;i++) f[1][nu[i]][b[i]]=1;for(int i=2;i<=n;i++){for(int j=1;j<=tt;j++)for(int k=1;k<=tt;k++){if((b[j]|b[k])!=b[j]+b[k]) continue;for(int l=nu[j];l<=kk;l++)f[i][l][b[j]]+=f[i-1][l-nu[j]][b[k]];}}for(int j=1;j<=tt;j++) ans+=f[n][kk][b[j]];printf("%lld\n",ans);return 0;
}
语文好差啊嘤嘤嘤

转载于:https://www.cnblogs.com/smyjr/p/9408631.html

luogu P1896 [SCOI2005]互不侵犯相关推荐

  1. 洛谷-P1896 [SCOI2005]互不侵犯

    链接:https://www.luogu.org/problemnew/show/P1896 题意: 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 ...

  2. 洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算

    题目链接:https://www.luogu.org/problem/P1896 题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数 n<=9 ,矩形状压 f[i][j][s], ...

  3. 状压DP【洛谷P1896】 [SCOI2005]互不侵犯

    P1896 [SCOI2005]互不侵犯 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...

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

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

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

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

  6. [BZOJ1087][SCOI2005]互不侵犯King

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行, ...

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

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

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

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

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

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

最新文章

  1. 使用nGraph的Intel®Xeon®上的高性能TensorFlow
  2. Oracle 查看被锁的表语句
  3. Mac androidStudio cannot resolve corresponding JNI function
  4. C#编程中的66个好习惯 值得收藏
  5. 洛谷 - P2763 试题库问题(最大流+路径打印)
  6. React之事件处理
  7. Java中string.equalsIgnoreCase(0)与0.equalsIgnoreCase(string)的区别:
  8. python类的应用_如何剖析python应用程序的类方法?
  9. IIS 7 启用 gzip 静态压缩 压缩js和css文件
  10. 处理服务器故障的前5分钟(转)
  11. Web安全防御从WAF到应用网关
  12. 实验室耗材管理系统,医院各科室如何进行耗材管理
  13. Eviews10下载及安装
  14. 八大排序算法(原理+代码详解)Python版
  15. Flutter-16进制透明颜色对照表
  16. 怎么把照片背景换掉?如何给照片换底色?
  17. 百度谷歌淘宝自定义搜索乱码问题的解决
  18. 在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择
  19. 空中交通通信控制设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 否则在Python中使用for / while语句

热门文章

  1. Ubuntu apt upgrade后黑屏问题
  2. 微信抢红包的方案_免费公开实收20000的烤鸭店营销方案,餐饮行业可复用
  3. VS Code 全部快捷键一览表(巨TM全)
  4. 洛谷 2016 战略游戏(树形DP)
  5. 数组及字符串相关知识
  6. Unsupported major.minor version 51.0(jdk版本错误)
  7. linux SHELL脚本编程
  8. linux下的各种shell介绍(bash和dash转换)
  9. HOG特征(Histogram of Gradient)学习总结
  10. 关于车机互联方式的一点想法