bzoj2339[HNOI2011]卡农 dp+容斥
2339: [HNOI2011]卡农
Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 842  Solved: 510
[Submit][Status][Discuss]
Description
可以把集合视作有序的,当做排列做,最后再 /m!
设f[i]表示选出i个集合的合法方案
选出了(i-1)个集合后,最后一个集合是唯一确定的 
总数就是A(2^n - 1,i-1)
但是最后确定的集合可能使方案不合法,有两种情况
1.最后确定的集合为空,这种情况的方案数=f[i-1]
2.最后确定的集合和之前确定的集合重复,因为有重复,所以删去这两个重复的集合,
依旧满足所有元素出现偶数次的性质, 这种情况的方案数 =f[i-2]*(2^n-1-(i-2)) 
ans就可以计算了
还有一种理解方式,理解成无序的,用组合搞
推荐blog http://blog.csdn.net/dflasher/article/details/51615325
#include<iostream>
#include<cstdio>
#define N 1000010
#define P 100000007
using namespace std;
long long n,m,p[N],f[N],temp;
long long power(long long a,long long b)
{
long long ans(1);
for(long long i=b;i;i>>=1,(a*=a)%=P) if(i&1)(ans*=a)%=P;
return ans;
}
void pre()
{
p[0]=1;
for (long long i=1;i<=m;i++) p[i]=(p[i-1]*((temp-i+1+P)%P))%P;
}
int main()
{
scanf("%lld%lld",&n,&m);
temp=power(2,n);temp--;
if (temp<0) temp+=P;
pre();
for (long long i=3;i<=m;i++)
f[i]=((p[i-1]-f[i-1]-f[i-2]*(i-1)%P*(temp-(i-2))%P)+P)%P;
temp=1;
for (long long i=1;i<=m;i++) (temp*=i)%=P;
(f[m]*=power(temp,P-2))%=P;
cout<<f[m];
}
bzoj2339[HNOI2011]卡农 dp+容斥的更多相关文章
- 【BZOJ2339】[HNOI2011]卡农 组合数+容斥
		
[BZOJ2339][HNOI2011]卡农 题解:虽然集合具有无序性,但是为了方便,我们先考虑有序的情况,最后将答案除以m!即可. 考虑DP.如果我们已经知道了前m-1个集合,那么第m个集合已经是确 ...
 - [BZOJ2339][HNOI2011]卡农
		
[BZOJ2339][HNOI2011]卡农 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见& ...
 - BZOJ2339[HNOI2011]卡农——递推+组合数
		
题目链接: [HNOI2011]卡农 题目要求从$S=\{1,2,3……n\}$中选出$m$个子集满足以下三个条件: 1.不能选空集 2.不能选相同的两个子集 3.每种元素出现次数必须为偶数次 我们考 ...
 - 【bzoj2339】[HNOI2011]卡农  dp+容斥原理
		
题目描述 题解 dp+容斥原理 先考虑有序数列的个数,然后除以$m!$即为集合的个数. 设$f[i]$表示选出$i$个集合作为满足条件的有序数列的方案数. 直接求$f[i]$较为困难,考虑容斥,满足条 ...
 - BZOJ2339 HNOI2011卡农(动态规划+组合数学)
		
考虑有序选择各子集,最后除以m!即可.设f[i]为选i个子集的合法方案数. 对f[i]考虑容斥,先只满足所有元素出现次数为偶数.确定前i-1个子集后第i个子集是确定的,那么方案数为A(2n-1,i-1 ...
 - 【BZOJ2339】卡农(递推,容斥)
		
[BZOJ2339]卡农(递推,容斥) 题面 BZOJ 题解 先简化一下题意: 在\([1,2^n-1]\)中选择不重复的\(m\)个数,使得他们异或和为\(0\)的方案数. 我们设\(f[i]\)表 ...
 - P3214 [HNOI2011]卡农
		
题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m ...
 - bzoj 3622 DP + 容斥
		
LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...
 - 【BZOJ 4665】 4665: 小w的喜糖 (DP+容斥)
		
4665: 小w的喜糖 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 94 Solved: 53 Description 废话不多说,反正小w要发喜 ...
 
随机推荐
- java关于for循环。
			
众所周知,JAVA中for循环的基本格式为: for(初始化表达式:布尔表达式:循环后更新表达式){循环体} 举个例子来说可以写成 (1)for (int x=1;x<10;x++){ Syst ...
 - Java 多线程 从无到有
			
个人总结:望对屏幕对面的您有所帮助 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是程序(任务)的执行过程,它持有资源(共享内存, ...
 - CDH:5.14.0 中 Hive BUG记录
			
CDH5.14.0使用的HIVE版本: 自建表log: +----------------------------------------------------+--+ | createtab_st ...
 - LeetCode & Q219-Contains Duplicate II
			
Array Hash Table Description: Given an array of integers and an integer k, find out whether there ar ...
 - .Net EntityFramwork6.0 EF框架开发入门
			
一.环境 开发环境:Sqlserver2008 R2.Visual Studio2012 二.准备工作 1.新建MVC空项目 2.通过NuGet获取 EntityFramework 包 操作截图 ...
 - jQuery ajax方法success()中后台传来的四种数据类型
			
1.后台返回一个页面 js代码 /**(1)用$("#content-wrapper").html(data);显示页面*/ $.ajax({ async : false, cac ...
 - win10的mysql服务无法启动
			
net start mysql 无法启动 1.可以进入MySQL的bin目录下 mysql --remove 2.检查一下自己的my.ini是否配置正确 [mysqld] #basedir代表自己My ...
 - z-index的权重是叠加的
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
 - Batch训练的反向传播过程
			
Batch训练的反向传播过程 本文试图通过Softmax理解Batch训练的反向传播过程 采用的网络包含一层全连接和一层softmax,具体网络如下图所示: 交叉熵成本函数: \[L = - \fra ...
 - Dev GridControl GridView 属性大全[中文解释]
			
Options 选项 OptionsBehavior 视图的行为选项 AllowAddRows 允许添加新数据行 AllowDeleteRows 允许删除数据行 AllowIncrementalSea ...