感觉不是很麻烦,可能就组合排列转化绕一点。。。

抽象化题意

给定 \(n\) 个元素,从中选出 \(m\) 个集合,要求:

  1. 集合不为空,集合里不能有相同的元素

  2. \(m\) 个集合都互不相同

  3. 所有元素被选出的次数为偶数

求方案数,并对 \(100000007\) 取模

凭感觉是DP+组合数

设 \(dp[i][0/1]\) 表示当前选了 \(i\) 个集合合法还是不合法的方案数,但是转移不好转移,因为我们并不知道哪些集合非法,所以我们不能将非法当成状态,只能把他放到转移里,怎么转移?考虑容斥。

若先满足第三个条件,那么就是 \(A^{i-1}_{2^n-1}\) ,因为取决奇偶的只会是最后一个,所以前面 \(i-1\) 任取。

还有两个条件,第一个条件怎么搞?“不能有相同元素”我们已经在第三个条件考虑过了,那我们先强制集合为空,所贡献的就是 \(dp[i-1]\) 种方案,所以减掉 \(dp[i-1]\) 。

最后一个,第二个条件怎么处理?容斥,当前考虑第 \(i\) 个集合,需要和前 \(i-1\) 个集合任意一个相同,且当前 \(i\) 集合的取法有 \(2^n-1-(i-2)\) 种,剩余 \(i-2\) 个集合是合法的,就是 \((i-1)(2^n-i+1)dp[i-2]\) 种

转移方程就是 \(dp[i]=A^{i-1}_{2^n-1}-dp[i-1]-(i-1)(2^n-i+1)dp[i-2]\) ,因为我们算得是排列,所以最后要除以 \(m!\) ,当然转移的时候也可以转成组合,就不需要除以 \(m!\) 了

#include<bits/stdc++.h>

#define int long long

#define maxn 2000005

const int mod=1e8+7;

using namespace std;

template<class T>

inline T read(){
T r=0,f=0;
char c;
while(!isdigit(c=getchar()))f|=(r=='-');
while(isdigit(c))r=(r*10)+(c^48),c=getchar();
return f?-r:r;
} int n,m; int dp[maxn],pow2,A[maxn]; inline int mypow(int a,int b){
int ret=1;
while(b){
if(b&1)ret=(ret*a)%mod;
a=(a*a)%mod,b>>=1;
}
return ret;
} signed main(){
n=read<int>();
m=read<int>();
if(n==1&&m==1){puts("1");return 0;}
pow2=mypow(2,n);
A[1]=pow2-1;
int tmp=pow2-1,facm=1;
for(int i=2;i<=m;i++)
A[i]=A[i-1]*(--tmp)%mod,facm=facm*i%mod;
dp[1]=0,dp[0]=1;
for(int i=2;i<=m;i++){
dp[i]=((A[i-1]-dp[i-1]+mod)%mod-(i-1)*(pow2-i+1)%mod*dp[i-2]%mod+mod)%mod; //pow2[n]-1-(i-2)
}
// for(int i=1;i<=m;i++)cout<<dp[i]<<endl;
printf("%lld\n",dp[m]*mypow(facm,mod-2)%mod);
return 0;
}

P3214 [HNOI2011] 卡农 题解的更多相关文章

  1. P3214 [HNOI2011]卡农

    题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m ...

  2. [HNOI2011]卡农 题解

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  3. 洛谷 P3214 - [HNOI2011]卡农(线性 dp)

    洛谷题面传送门 又是一道我不会的代码超短的题( 一开始想着用生成函数搞,结果怎么都搞不粗来/ll 首先不妨假设音阶之间存在顺序关系,最终答案除以 \(m!\) 即可. 本题个人认为一个比较亮的地方在于 ...

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

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

  5. [BZOJ2339][HNOI2011]卡农

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

  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. [HNOI2011]卡农 (数论计数,DP)

    题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...

  9. [HNOI2011]卡农

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  10. 【bzoj2339】[HNOI2011]卡农 dp+容斥原理

    题目描述 题解 dp+容斥原理 先考虑有序数列的个数,然后除以$m!$即为集合的个数. 设$f[i]$表示选出$i$个集合作为满足条件的有序数列的方案数. 直接求$f[i]$较为困难,考虑容斥,满足条 ...

随机推荐

  1. 用git bash 生成 hexo 博客文件,报错node: command not found

    有git bash,也安装了node.js, 为什么在bash里面会说node: command not found? 电脑有段时间不能上网,下载了360系统急救箱,删了很多文件,包括一些exe文件, ...

  2. PTA 21级数据结构与算法实验7—查找表

    目录 7-1 电话聊天狂人 7-2 两个有序序列的中位数 7-3 词频统计 7-4 集合相似度 7-5 悄悄关注 7-6 单身狗 7-7 词典 7-8 这是二叉搜索树吗? 7-9 二叉搜索树 7-1 ...

  3. vxe-table中文文档

    https://xuliangzhan_admin.gitee.io/vxe-table/#/table/grid/fullEdit

  4. koa搭建nodejs项目并注册接口

    使用nodejs注册接口逻辑处理会比较复杂,直接通过express或者koa能够简化开发流程,这里记录用koa来搭建nodejs项目并注册接口,对koa不太熟悉的话可以参考这一篇.让nodejs开启服 ...

  5. 何时使用MongoDB而不是MySql

    什么是 MySQL 和 MongoDB MySQL 和 MongoDB 是两个可用于存储和管理数据的数据库管理系统.MySQL 是一个关系数据库系统,以结构化表格格式存储数据.相比之下,MongoDB ...

  6. 用户空间协议栈设计和netmap综合指南

    本文分享自华为云社区<用户空间协议栈设计和netmap综合指南,将网络效率提升到新高度>,作者:Lion Long . 协议概念 1.1.七层网络模型和五层网络模型 应用层: 最接近用户的 ...

  7. AVR汇编(七):位操作和MCU控制指令

    AVR汇编(七):位操作和MCU控制指令 位操作指令 SBI / CBI SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位. 例如: SBI DDRB, ...

  8. [ABC128E] Roadwork

    2023-01-14 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 区间覆盖,线段树,双堆 解题思路 可以将问题转化为区间覆盖问题和单点查询问 ...

  9. 【路由器】OpenWrt 简介和安装

    目录 简介 来源 介绍 安装 一般安装流程 固件搜索下载 参考资料 简介 来源 2002 年底 Linksys 公司推出 WRT-54G,采用了 Linux 取代了原来的 vXworks 系统.迫于 ...

  10. Codeforces Round #576 (Div. 2)

    A - City Day 题意:给n,x,y和数组a[n],求最小的下标d,使得有a[d-x,d-x+1,--d-1,d+1,d-1,d+1,--d+y-1,d+y]都比a[d]小,若d-x<= ...