问题描述

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}\)

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

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. jQuery总结02_jq的dom操作+属性操作

    一:JQuery知识点 *:JQuery的dom操作 *:获取节点.给节点添加内容 *:动态创建dom节点 比如动态创建表格等,在js里面进行完成. *删除节点 这里面的删除就是将其放在了一个地方,并 ...

  2. table-layout:fixed

    table-layout: fixed; 在table上设置上面属性后,如果不设置td的宽度,那么所有td的宽度平分总table宽度.如果设置了td的宽度,则以设置的宽度为准. table-layou ...

  3. React躬行记(12)——Redux中间件

    Redux的中间件(Middleware)遵循了即插即用的设计思想,出现在Action到达Reducer之前(如图10所示)的位置.中间件是一个固定模式的独立函数,当把多个中间件像管道那样串联在一起时 ...

  4. 小知识:设置sqlplus默认vi编辑器的好处

    如果是客户生产环境,不允许修改任何环境类的配置,那发现sqlplus默认不是我们熟悉的vi,可以在SQL>下临时指定,方便操作: SQL> define_editor=vi SQL> ...

  5. IO相关Demo

    这几天复习了IO相关知识 只为记录,好记性不如烂笔头 有误请指正 ありがとうございます. 我的公众号 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.判断存在,存在改名,并延迟删除,不存在新建 ...

  6. 页面QQ临时对话的实现

    一.开通QQ服务 点我进入QQ推广官网>然后点击推广工具即可后面自己看中文 二.页面a标签 <a target="_blank" href="http://w ...

  7. ie11 SCRIPT5011:不能执行已释放Script的代码

    依照我遇到的问题为例: (我的页面结构为:父页面中嵌套有iframe子页面) 1.造成这种情况的原因是:父页面初始化声明变量a为数组(数组对象是引用类型,赋值传递的是地址),创建iframe子页面后给 ...

  8. ES6-字符串模板

    es6字符串模板 // es5 let ananiah = "大诶呀"; let blog = "我要忘了你的样子"+ ananiah; console.log ...

  9. Dynamics 365 CE Update消息PostOperation阶段Image的尝试

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  10. 记录:c#实现微信,支付宝扫码支付(一)

    因为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能. 微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.a ...