题目

在集合S=[1∼n]S=[1\sim n]S=[1∼n]中选出mmm个子集,满足三点性质:

  1. 所有选出的mmm个子集都不能为空。
  2. 所有选出的mmm个子集中,不能存在两个完全一样的集合。
  3. 所有选出的mmm个子集中,1到nnn每个元素出现的次数必须是偶数。

问有多少种不同的方法,两个子集 a 和 b 同种当且仅当将 a 的子集重新排列后可以得到 b


分析

首先作为一道黑题,它还是具有它的难度的,因为是真的恶心。
首先不同就是个幌子,只要答案除以m!m!m!的阶乘就可以了。
设dp[i]dp[i]dp[i]表示前iii个合法集合的方法数
第二,考虑容斥,若是偶数,那么第iii个是唯一的,也就是前i−1i-1i−1个出现奇数次的,所以总共方案是P2n−1i−1P^{i-1}_{2^n-1}P2n−1i−1​
然后,非空,那么当第iii个集合为空时,那么方案数是dp[i−1]dp[i-1]dp[i−1]
接着不能存在完全一样的集合,若jjj与iii重复,那么剩下的i−2i-2i−2个子集是合法方案,jjj有i−1i-1i−1种取值,第jjj个子集可以有2n−1−(i−2)2^n-1-(i-2)2n−1−(i−2)种方案,所以也就是dp[i−2]×(i−1)×(2n−i+1)dp[i-2]\times (i-1)\times (2^n-i+1)dp[i−2]×(i−1)×(2n−i+1)
综上所述,dp[i]=P2n−1i−1−dp[i−1]−dp[i−2]×(i−1)×(2n−i+1)dp[i]=P^{i-1}_{2^n-1}-dp[i-1]-dp[i-2]\times (i-1)\times (2^n-i+1)dp[i]=P2n−1i−1​−dp[i−1]−dp[i−2]×(i−1)×(2n−i+1)
dp[0]=1,dp[1]=0dp[0]=1,dp[1]=0dp[0]=1,dp[1]=0(是真的骚)


代码

#include <cstdio>
#define rr register
using namespace std;
typedef long long ll;
const ll mod=100000007;
inline ll ksm(ll x,ll y){rr ll ans=1;for (;y;y>>=1,x=x*x%mod)if (y&1) ans=ans*x%mod;return ans;
}
signed main(){rr int n,m; rr ll dp=0;scanf("%d%d",&n,&m);rr ll mi=ksm(2,n),dp1=0,dp2=1,c=1,jc=1;for (rr int i=2;i<=m;++i){rr ll t=mi-i+1+mod; c=c*t%mod,jc=jc*i%mod;dp=((c-dp1-dp2*(i-1)%mod*t%mod)+mod)%mod,dp2=dp1,dp1=dp;}return !printf("%lld",dp*ksm(jc,mod-2)%mod);
}

#容斥,组合计数#洛谷 3214 卡农相关推荐

  1. 信息学奥赛一本通 1316:【例4.6】数的计数(Noip2001) | 1914:【01NOIP普及组】数的计数 | 洛谷 P1028 [NOIP2001 普及组] 数的计算

    [题目链接] ybt 1316:[例4.6]数的计数(Noip2001) ybt 1914:[01NOIP普及组]数的计数 洛谷 P1028 [NOIP2001 普及组] 数的计算 [题目考点] 1. ...

  2. HDU 6143 Killer Names(容斥+组合)

    #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...

  3. 数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农

    丝且人一口 Virus Tree 2 description solution code RGB Coloring description solution code 123 Triangle des ...

  4. 拓扑排序——最大食物链计数(洛谷 P4017)

    题目选自洛谷P4017 这里具体讲一下为什么要用拓扑排序(思维过程): 1.这是一道图论题: 2.不是求最短路: 3.根据提示"最左端是不会捕食其他生物的生产者"可以想到,我们要入 ...

  5. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)

    题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...

  6. 合理抽象灵活运用排列组合(洛谷P2181题题解,Java语言描述)

    题目要求 P2181题目链接 分析 其实,本题是一个数学题... 首先由题意得,不会有三条对角线交于一点,所以过某一个交点有且只能有2条对角线. 而这两条对角线实质上是确定了4个顶点(也可以看做是一个 ...

  7. 洛谷 最大食物链计数 python题解

    题目:P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给你一个食物网,你要求出这个食物网中最大食物链的数量. (这里的"最大食物链&q ...

  8. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  9. 洛谷大起义胜利的经验总结

    UPD1(2019.7.11):chen_zhe解除了对我的禁言,但仍保持大脑皮层对刷题重心转到LibreOJ的决策,50年不变. 2019-07-09 9:54 结束黑暗无光的\(luogu\)统治 ...

最新文章

  1. asp.net 连接access数据库方法
  2. linux虚拟机ip地址更改
  3. c语言程序设计教程岳莉答案,C++程序设计教程
  4. Envoy实现.NET架构的网关(一)静态配置与文件动态配置
  5. 以太网和路由设置,内网和外网同时上
  6. iptables规则书写总结
  7. Python机器学习:PCA与梯度上升:04求数据的前n个主成分
  8. 微信公众平台开发(一) 配置接口
  9. 2011年3月四级网络工程师笔试试卷 解答思路
  10. 《算法分析与设计》课程任务
  11. 单片机关于protues中数码管的显示
  12. C语言match函数的定义与用法,Match函数的基本用法
  13. 如何在腾讯云服务器部署web项目
  14. css flex布局iOS8兼容性问题
  15. 斐讯音箱控制扫地机器人_斐讯大能X3扫地机器人首批测试,这回真没花一分钱!...
  16. 利用非约束性委派+Spooler打印机服务 制作黄金票据攻击域控
  17. 为什么很多计算机专业大学生毕业后还会参加培训?
  18. vue-devtools安装教程 附各种常见错误处理(图标不显示 图标显示控制台没用Vue选项卡)
  19. Python数据结构11:树的实现,树的应用,前中后序遍历,二叉查找树BST,平衡二叉树AVL树,哈夫曼树和哈夫曼编码
  20. tkinter之字体(无废话的那种)

热门文章

  1. Java web学习记载
  2. 设计求任意两个整数和的web程序,用户通过提交页面(input.jsp)输入两个整数,并提交给一个(sum.jsp)程序
  3. Django MVT模型详解--高级
  4. 在网上购物竟然也能和Python扯上关系!电脑上用自己写的程序购物?别说,QT实现还真挺简单(Python如何利用QT制作电脑的手机版拼多多)
  5. 开源课程管理系统(CMS):Moodle
  6. Scrapy+selenimu分析《海王》到底有多好看
  7. DAPM-widget
  8. API标准化的重要性
  9. c语言函数嵌套是啥,函数的嵌套是什么 函数的嵌套是什么意思
  10. 程序员专用经典语录—看完笑一阵可以,千万不要死循环哦!