P3214 [HNOI2011] 卡农 题解
感觉不是很麻烦,可能就组合排列转化绕一点。。。
抽象化题意
给定 \(n\) 个元素,从中选出 \(m\) 个集合,要求:
集合不为空,集合里不能有相同的元素
\(m\) 个集合都互不相同
所有元素被选出的次数为偶数
求方案数,并对 \(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] 卡农 题解的更多相关文章
- P3214 [HNOI2011]卡农
题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m ...
- [HNOI2011]卡农 题解
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...
- 洛谷 P3214 - [HNOI2011]卡农(线性 dp)
洛谷题面传送门 又是一道我不会的代码超短的题( 一开始想着用生成函数搞,结果怎么都搞不粗来/ll 首先不妨假设音阶之间存在顺序关系,最终答案除以 \(m!\) 即可. 本题个人认为一个比较亮的地方在于 ...
- 【BZOJ2339】[HNOI2011]卡农 组合数+容斥
[BZOJ2339][HNOI2011]卡农 题解:虽然集合具有无序性,但是为了方便,我们先考虑有序的情况,最后将答案除以m!即可. 考虑DP.如果我们已经知道了前m-1个集合,那么第m个集合已经是确 ...
- [BZOJ2339][HNOI2011]卡农
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
- bzoj2339[HNOI2011]卡农 dp+容斥
2339: [HNOI2011]卡农 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 842 Solved: 510[Submit][Status][ ...
- BZOJ2339[HNOI2011]卡农——递推+组合数
题目链接: [HNOI2011]卡农 题目要求从$S=\{1,2,3……n\}$中选出$m$个子集满足以下三个条件: 1.不能选空集 2.不能选相同的两个子集 3.每种元素出现次数必须为偶数次 我们考 ...
- [HNOI2011]卡农 (数论计数,DP)
题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...
- [HNOI2011]卡农
题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...
- 【bzoj2339】[HNOI2011]卡农 dp+容斥原理
题目描述 题解 dp+容斥原理 先考虑有序数列的个数,然后除以$m!$即为集合的个数. 设$f[i]$表示选出$i$个集合作为满足条件的有序数列的方案数. 直接求$f[i]$较为困难,考虑容斥,满足条 ...
随机推荐
- Flask结合gunicorn和nginx反向代理的生产环境部署及踩坑记录
前言 之前自己写的flask使用gunicorn上线生产环境没有什么问题,但是最近搭建了一个现成的flask项目,当使用python直接运行时不会有问题,而使用gunicorn时则会出现一些问题. 部 ...
- Button按钮:得到鼠标焦点后自动放大,失去鼠标焦点后自动缩小_
作用 程序设计过程中,我们经常需要增加一些动态效果,以此改善用户的使用体验.本文将介绍一种方法,动态显示按钮状态,使其得到鼠标焦点后自动放大,失去鼠标焦点后自动缩小. 效果图 先放一张原图(鼠标还未移 ...
- Linux下手工编译libiconv库的小问题
我的电脑是 Ubuntu 14.04 LTS, 自己手工编译 php5.6, 打开 ZEND_EXTRA_LIBS='-liconv' 时, 发现没有安装 libiconv, 也就是编码转换的库, 所 ...
- linux内核编译基础知识储备 --- 过渡篇(四)
文章目录 一. 一种makefile中定义函数的方式 二. makefile之if函数 三. MAKE变量 四. $(quiet) 4.1 quiet = 空 与 quiet=quiet_ 的区别 4 ...
- EntityCleanFramework
EF几乎是按照领域的概念诞生,它可以和Clean结合(ECF是我新想出的名字).ECF 是为了统一业务架构开发方式,也可以说成在 微服务架构 中服务的通用开发方式.当有了统一开发方式后,协作将更上一层 ...
- 关于NOI2010“超级钢琴”的反思
[NOI2010] 超级钢琴 题目描述 小 Z 是一个小有名气的钢琴家,最近 C 博士送给了小 Z 一架超级钢琴,小 Z 希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 \(n\ ...
- 【go笔记】简单的http服务
前言 Go语言通过内置的标准库net/http可以非常方便地实现web服务.不借助任何框架,单凭标准库,50行代码内即可实现简单的web服务. http的ListenAndServe()函数原型: f ...
- AVR汇编(二):AVR架构介绍
AVR汇编(二):AVR架构介绍 ATmega328P介绍 ATmega328P是Atmel公司(现Microchip公司)推出的一个基于AVR架构的高性能低功耗单片机,拥有32KB的Flash.1K ...
- 集训后的一些wp
新生赛后 0x01 2048(jk出发) 修改跳转条件为nop,随便动一下直接打印flag.这个场景我幻想过很久了,一直没做到,这次参考wp做出来了知道怎么做了.学到! 0x02 four(dsact ...
- ImGui界面优化:使用图标字体、隐藏主窗口标题栏
目录 使用图标字体 扩展:内存加载字体 隐藏主窗口标题栏 增加程序退出 改进HideTabBar 窗口最大化 总结 本文主要介绍ImGui应用中的一些界面优化方法,如果是第一次使用ImGui推荐从上一 ...