问题描述

BZOJ2339


本题的一些心得

对于这种无序集合计数类问题,可以通过对方案数除以某个数的阶乘,使得无序化变为有序化。

设计DP方程时候,应该先有序的列出状态转移方程每一项的来源,并一项项推导式子,可以使得做题过程更加有条理。

一个拥有良好科学素养的人,一定是有条理的 ——李理


题解

对于本题,发现如果最后对答案除以 \(m!\),则可以使得集合 「有序化」 。

对于一个满足要求的方案,必须满足以下 \(3\) 个条件:

  • 没有互相重复的集合

  • 没有空集

  • 集合中的每个元素都必须出现偶数次

设 \(dp[i]\) 代表满足以上三个限制条件时的方案数。

对于三个限制条件分开考虑。

首先,对于条件 \(3\) ,只要知道 \(dp[1],dp[2],\cdot,dp[i-1]\) ,就可以推出 \(dp[n]=A_{2^n-1}^{i-1}\) 。

对于条件 \(1\) ,假设集合 \(j\) 与集合 \(i\) 重复,则 \(j\) 有 \(i-1\) 种取法,\(i\) 有 \(2^n-1-(i-2)=2^n-i+1\) 种取法,本处去掉的贡献为 \(dp[i-2] \times (n-1) \times (2^n-i+1)\) 。

对于条件 \(2\) ,如果有空集,则前 \(i-1\) 个符合条件,去掉贡献 \(dp[i-1]\) 。


\(\mathrm{Code}\)

  1. 调试中,码力不行,甘拜下风

BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学的更多相关文章

  1. 【BZOJ2339】【HNOI2011】卡农

    题解: 首先用二进制表示每个音阶是否使用,那么共有$2^{n}-1$(空集不可行)种片段,用$a_{i}$来表示每个片段,问题就是求满足$a_{1}\left (xor\right)a_{2}\lef ...

  2. BZOJ 2339 【HNOI2011】 卡农

    题目链接:卡农 听说这道题是经典题? 首先明确一下题意(我在这里纠结了好久):有\(n\)个数,要求你选出\(m\)个不同的子集,使得每个数都出现了偶数次.无先后顺序. 这道题就是一道数学题.显然我们 ...

  3. 【HNOI2011】卡农

    题面 题解 将无序化为有序,最后答案除以$m!$. 设$f[i]$表示选出了$i$个子集,并且满足所有的限制的方案数. 因为转移困难,所以考虑容斥 限制了每个数的出现次数为偶数,所以如果前$i - 1 ...

  4. [BZOJ2339][HNOI2011]卡农

    [BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...

  5. 【BZOJ2339】[HNOI2011]卡农 组合数+容斥

    [BZOJ2339][HNOI2011]卡农 题解:虽然集合具有无序性,但是为了方便,我们先考虑有序的情况,最后将答案除以m!即可. 考虑DP.如果我们已经知道了前m-1个集合,那么第m个集合已经是确 ...

  6. bzoj2339[HNOI2011]卡农 dp+容斥

    2339: [HNOI2011]卡农 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 842  Solved: 510[Submit][Status][ ...

  7. BZOJ2339[HNOI2011]卡农——递推+组合数

    题目链接: [HNOI2011]卡农 题目要求从$S=\{1,2,3……n\}$中选出$m$个子集满足以下三个条件: 1.不能选空集 2.不能选相同的两个子集 3.每种元素出现次数必须为偶数次 我们考 ...

  8. 「TJOI2015」组合数学 解题报告

    「TJOI2015」组合数学 这不是个贪心吗? 怎么都最小链覆盖=最大点独立集去了 注意到一个点出度最多只有2,可以贪心一下出度的去向 按读入顺序处理就可以,维护一个\(res_i\)数组,表示上一行 ...

  9. 【BZOJ2339】卡农(递推,容斥)

    [BZOJ2339]卡农(递推,容斥) 题面 BZOJ 题解 先简化一下题意: 在\([1,2^n-1]\)中选择不重复的\(m\)个数,使得他们异或和为\(0\)的方案数. 我们设\(f[i]\)表 ...

随机推荐

  1. JavaWeb学习——web.xml文件说明

    JavaWeb学习——web.xml文件说明 摘要:本文主要学习了web.xml文件的作用以及如果配置. 是什么 web.xml文件是用来在JavaWeb项目里面初始化配置信息的,比如:访问的首页.S ...

  2. 使用 getUserMedia API获取麦克风和相机等流媒体

    概览 mediaDevices 是 Navigator 对象的只读属性,一个单列对象,可以连接访问相机和麦克风,屏幕共享等媒体输入设备 方法 enumerateDevices 请求一个可用的媒体输入和 ...

  3. FCC---CSS Flexbox: Add Flex Superpowers to the Tweet Embed

    To the right is the tweet embed that will be used as the practical example. Some of the elements wou ...

  4. iOS AOP实战

    AOP: 面向切面编程,偏向于处理业务的某个阶段 适用场景: 1. 参数校验:网络请求前的参数校验,返回数据的格式校验等等 2. 无痕埋点:统一处理埋点,降低代码耦合度 3. 页面统计:帮助统计页面访 ...

  5. centos_redis 安装脚本

    #!/bin/bash # change to root echo "start to install build env..." sudo yum groupinstall &q ...

  6. Windows系统Git安装教程(详解Git安装过程)

    Windows系统Git安装教程(详解Git安装过程)   今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序   到Git官网下载,网站地址: ...

  7. oracle截取时间的年/月/日/时/分/秒

    修改日期格式为年月日时分秒: alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';select to_char(sysdate,'yyy ...

  8. 012.MongoDB读写分离

    一 读写分离概述 1.1 读写分离描述 从应用程序角度来看,使用Replica Set 和使用单台mongo很像.默认的驱动程序会连接primary节点,并且将所有读写请求都路由到主节点.但也可以通过 ...

  9. 使用fidder对安卓模拟器进行抓包

    本文主要介绍fiddler4对安卓模拟器的抓包设置 首先在官网下载fiddler4进行安装,然后下载安卓模拟器,这里使用网易的MuMu模拟器. 1.fiddler4的设置对于fiddler4的设置,首 ...

  10. jQuery 源码分析(二十) DOM操作模块 插入元素 详解

    jQuery的DOM操作模块封装了DOM模型的insertBefore().appendChild().removeChild().cloneNode().replaceChild()等原生方法.分为 ...