题面

http://zhengruioi.com/problem/248

题解

三重容斥(说是两重也行吧)

我们来看题目的约束

①有k个位置不能放(k≤8)

②每行每列至少一个

③正负对角线至少一个

④正好放n个

首先对于约束① 我们用$2^k$的容斥 也就是枚举$2^k$种放的方式,算出来之后加加减减就行了

对于约束③ 我们枚举每条对角线能不能放 然后solve(1,1)-solve(1,0)-solve(0,1)+solve(0,0)就是答案 1表示能放,0表示不能放

然后问题变成了

在一个格子图上,有$k$个点已经放上房子$(1 \leq k \leq 8)$,主对角线和副对角线有一些不能放房子,问每行每列正好放一个,一共放$n$个房子的方案数

我们把已经放上格子的去掉,并且把那一行和那一列都去掉,这样对角线可能会变成扭曲的形状,但是就没有了已经放上房子的条件

然后我们把行列交换 因为无论怎么交换一整行或者一整列,都不影响答案 交换之后我们使得主对角线和副对角线上相互影响的格子放到一起

例子:

我们这样做:

先不删格子 然后把第n行放到第一行下面,第n-1行放到第二行下面……

然后把第n列放到第一列右边,第n-1列放到第二列右边……

这样我们可以把互相影响的四个格子并起来 变成从左上角到右下角一堆2*2的格子 可能加上一个单独的格子(n为奇数)

然后再删格子

我们用f[i][j]表示当前考虑到第i个“格子的并”,当前放了j个房子,然后看第i个“格子的并”能放几个房子(0~2个),更新答案

然后我们就得到$f[cnt][k]*A_{m-k}^{n-k}$表示在这个图里,假设n<=m,对角线上放k个房子的方案数

这样再加一加,算一算就得到了答案

模拟赛01 T3 盖房子的更多相关文章

  1. 洛谷noip 模拟赛 day1 T3

    T7983 大芳的逆行板载 题目背景 大芳有一个不太好的习惯:在车里养青蛙.青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去.她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹.有一天他突发奇 ...

  2. 「2018-12-02模拟赛」T3 约束排列 解题报告

    3.约束排列(place.pas/cpp/in/out) 问题描述: 给出 n 个互不相同的小写字母,表示出现的字符类型,以及 k 个约束关系: .....,表示 ai 必须出现在 bi 前面(ai, ...

  3. 雅礼 noip2018 模拟赛 day3 T3

    典型树形dp 这里,我们应该看到一些基本性质: ①:如果这个边不能改(不是没有必要改),我们就不改,因为就算改过去还要改回来,显然不是最优的 注意:"不能改"是指边的性质和要求的相 ...

  4. war2 洛谷模拟赛day2 t3 状压

    (new )   war2 题解:总体数据而言,我们很容易想到着就是DP啊,我们DP数组,用状态压缩,代表有那些点已经被占领过了,代表上一次我占的是那个.对于每一次状态转移,若当前我们要占领的Port ...

  5. 冲刺$\mathfrak{CSP-S}$集训模拟赛总结

    开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...

  6. DP 01背包 七夕模拟赛

    问题 D: 七夕模拟赛 时间限制: 1 Sec  内存限制: 128 MB提交: 60  解决: 23[提交][状态][讨论版] 题目描述 " 找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手 ...

  7. 体育成绩统计——20180801模拟赛T3

    体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时, ...

  8. 20180520模拟赛T3——chess

    [问题描述] 小美很喜欢下象棋. 而且她特别喜欢象棋中的马. 她觉得马的跳跃方式很独特.(以日字格的方式跳跃) 小芳给了小美一张很大的棋盘,这个棋盘是一个无穷的笛卡尔坐标. 一开始\(time=0\) ...

  9. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

随机推荐

  1. AdaBoost算法原理简介

    AdaBoost算法原理 AdaBoost算法针对不同的训练集训练同一个基本分类器(弱分类器),然后把这些在不同训练集上得到的分类器集合起来,构成一个更强的最终的分类器(强分类器).理论证明,只要每个 ...

  2. 距特征之k阶距概念

    k阶原点距和k阶中心距各是说明什么数字特征 http://www.cnblogs.com/emanlee/archive/2011/04/25/2028628.html 二阶中心距,也叫作方差,它告诉 ...

  3. UsbManager, UsbDevice的简单示例

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  4. 推断View是否显示在界面上

    我们都知道ViewController有viewWillAppear和viewDidAppear等关于页面生命周期的方法,用来对视图做一些管理,比方页面出现时怎么样,页面消失时怎么样.. 可是对于Vi ...

  5. 今日头条上看到的js面试题和答案

    用js判断字符中每个字符出现的次数, 答案是var info = arr.split('').reduce((a,b)=>(console.log(a,b),a[b]++ || (a[b]=1) ...

  6. 网络编程、三要素、Socket通信、UDP传输、TCP协议、服务端(二十五)

    1.网络编程概述 * A:计算机网络 * 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传 ...

  7. Web前端性能优化经验分享

    最近一直有给新同学做前端方面的培训,也有去参与公司前端的招聘,所以把自己资料库里面很多高效且有用的知识做了些 规整分类,然后再分享一篇关于前端优化方面的总结.而且春节一过就又是招聘的高峰期了,在校的. ...

  8. Fabric原理剖析

    Fabric架构   image.png Fabric网络   image.png Fabric模块   image.png Fabric交易流 根据Hyperledger Fabric 1.0架构, ...

  9. 【矩阵---求A的1到N次幂之和】

    引例: Matrix Power Series: 题目大意,给定矩阵A,求A^+A^+A^+...A^N. 题解:已知X=a,可以通过以下矩阵求出ans=a^+a^+...a^=矩阵^(n+)后右上格 ...

  10. Excel: 应用Match/Vlookup比较Excel两列的不同数据

    假设Excel中有两列,现在要比较两列数据的不同.