正题


题目大意

一个骑士会攻击对角线的位置,然后n∗nn*nn∗n的棋盘上放mmm个骑士求方案数。


解题思路

我们将棋盘翻转以两个对角线为中间,这样骑士就变成了横着打和竖着打。
设fi,s,jf_{i,s,j}fi,s,j​表示第iii条对角线,不能放置骑士的位置状态为sss,已经放置了jjj个骑士。
我们注意到单数和偶数是分开的,所以我们分开处理
有fi,s,j=∑z=sxorkj&2kfi−2,z,j−1+fi−2,s,jf_{i,s,j}=\sum_{z=s\ xor\ k}^{j\&2^k} f_{i-2,z,j-1}+f_{i-2,s,j}fi,s,j​=z=s xor k∑j&2k​fi−2,z,j−1​+fi−2,s,j​
然后ans=∑im(∑(f2∗n−1,s,i)∗∑(f2∗n−2,s,m−i))ans=\sum_{i}^m(\sum (f_{2*n-1,s,i})*\sum(f_{2*n-2,s,m-i}))ans=i∑m​(∑(f2∗n−1,s,i​)∗∑(f2∗n−2,s,m−i​))
然后数组滚动一下就过了


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=31;
ll n,m,f[3][32768][N],g[3][32768][N],ans1,ans2,ans;
int main()
{//freopen("chess.in","r",stdin);//freopen("chess.out","w",stdout);scanf("%lld%lld",&n,&m);f[1][0][0]=f[1][1<<((n+1)/2-1)][1]=1;ll MS=(1<<n);bool flag=0;ll l,r;l=r=(n+1)/2;for(ll i=3;i<=2*n-1;i+=3){int I=i%3,L=(i+1)%3;memset(f[I],0,sizeof(f[I]));if(i==n+1) l=l,r=r;else if(flag)l++,r--;else r++,l--;if(l==1) flag=1;for(ll j=0;j<MS;j++){for(ll k=l-1;k<=r-1;k++)if(j&(1<<k)){ll z=j^(1<<k);for(ll w=1;w<=m;w++)f[I][j][w]+=f[L][z][w-1];}for(ll w=0;w<=m;w++)f[I][j][w]+=f[L][j][w];}}l=n/2+1;r=n/2;flag=0;g[0][0][0]=1;for(ll i=2;i<=2*n-1;i+=2){int I=i%3,L=(i+1)%3;memset(g[I],0,sizeof(g[I]));if(i==n+1) l=l,r=r;else if(flag) l++,r--;else l--,r++;if(l==1) flag=1;for(ll j=0;j<MS;j++){for(ll k=l-1;k<=r-1;k++)if(j&(1<<k)){ll z=j^(1<<k);for(ll w=1;w<=m;w++)g[I][j][w]+=g[L][z][w-1];}for(ll w=0;w<=m;w++)g[I][j][w]+=g[L][j][w];}}for(ll i=0;i<=m;i++){ans1=ans2=0;int I1=(2*n-1)%3,I2=(2*n-2)%3;for(ll j=0;j<MS;j++)ans1+=f[I1][j][i];for(ll j=0;j<MS;j++)ans2+=g[I2][j][m-i];ans+=ans1*ans2;}printf("%lld",ans);
}

jzoj1213-棋盘上的士兵【状压dp】相关推荐

  1. POJ 1185 炮兵阵地 【状压DP】

    <题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...

  2. HITOJ 2662 Pieces Assignment(状压DP)

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  3. AcWing1064.骑士(状压DP)题解

    Acwing.骑士(状压DP) 题目传送门 题目描述 在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数. 输入格式 共一行,包含两个整数 n 和 k. ...

  4. 状压dp板子 德玛西亚万岁

    好吧,虽然它是道板子题,但我还是做了很久,wa了n发,主要还是不能很清晰的整理思路,并且多组样例的清空也总是有遗漏...(真是个菜鸡) 链接:登录-专业IT笔试面试备考平台_牛客网 n*m的土地,要求 ...

  5. DP模型——状压DP

    文章目录 前言 什么是状态压缩DP 基本例题1 前期思考 状态表示 状态计算 Code 基本例题2 前期思考 状态表示 状态计算 Code 扩展 棋盘式 小国王 思考 状态表示 状态计算 Code 玉 ...

  6. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  7. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  8. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  9. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  10. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

最新文章

  1. Http接口开发(自测服务端客户端)
  2. Spring配置中context:annotation-config VS context:component-scan
  3. 工程之道,解读业界最佳的深度学习推理性能优化方案
  4. 数学 之 hdu 4710 Balls Rearrangement
  5. java day13【Collection、泛型】
  6. PS:学习:一:删除图片不想要的部分
  7. 轻轻松松做出绝美词云!这是比阿里云DataV还好用的数据可视化平台
  8. Linux必会的rpm命令安装软件
  9. 高并发系统负载均衡与实时监控的实用方案
  10. TestFlight iOS 平台 App内测 工具使用
  11. 电脑连接手机热点频繁掉线问题
  12. HTML 的js中手机号,身份证号等正则表达式表示
  13. Word2Vec之Skip-Gram与CBOW模型
  14. ajax查询全国天气预报,使用聚合数据api接口
  15. damon ps2 android,DamonPS2模拟器
  16. 超好用,18 个 Jupyter Notebook 使用技巧助你快速腾飞
  17. CentOS 6.9下安装PostgreSQL
  18. Gradient Harmonized Single-stage Detector
  19. 单点要信双点遥信区别
  20. win7将mysql换个盘_win7系统镜像文件包win7系统驱动光盘

热门文章

  1. html5伸缩效果,【HTML5】Jquery打造竖向伸缩/展开菜单
  2. python json方法详解_python详解json模块
  3. 学计算机与学英语作文,初二英语作文(关于计算机与学习)
  4. phpstorm设置 打开文件所在目录_PDF文件在线分享并设置打开次数
  5. python字符串截取方法_如何使用python语言中的字符串方法截取字符串
  6. 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!
  7. 拓扑排序C++实现+实例解析(详解 兄弟们冲呀呀呀呀呀呀呀)
  8. 文件的创建与读取 文件的数据添加
  9. [蓝桥杯][基础练习VIP]Huffuman树
  10. 2021年度训练联盟热身训练赛第五场 H题In-place Sorting+贪心构造