首页 > 其他分享 >组合数学学习笔记(二)(2024.7.4)

组合数学学习笔记(二)(2024.7.4)

时间:2024-08-01 16:43:48浏览次数:9  
标签:ni dbinom limits 2024.7 sum min 笔记 数学 dp

一、鸽巢原理

1.鸽巢原理

将 \((\sum\limits_{i=1}^n{p_i})-n+1\) 放入 \(n\) 个盒子,一定存在一个盒子 \(i\),使得第 \(i\) 个盒子至少装了 \(p_i\) 个物品。

练习一

有十个数 \(a_1,a_2\dots a_{10}\) 满足 \(\forall_{1\leq i\leq10}{1\leq a_i\leq60}\),证明能够从 \(a_i\) 中挑出两个交为空的子集,使得它们的和相等。

练习二

证明一张有超过 1 个点的简单无向图必定有两点度数相等。

练习三

证明能从任意 11 个实数中挑选出 4 个数 \(a,b,c,d\) 满足:

\((ac+bd)^2\geq\frac 1 2(a^2+b^2)(c^2+d^2)\)

二、容斥原理

二项式反演

\[F(n)=\sum\limits_{i=m}^n\dbinom ni G(i) \\ G(n)=\sum\limits_{i=m}^n(-1)^{n-i}\dbinom ni G(i) \\ F(n)=\sum\limits_{i=m}^n\dbinom im G(i) \\ G(n)=\sum\limits_{i=m}^n(-1)^{i-m}\dbinom im F(i) \]

证:\(F(n)=\sum\limits_{i=m}^n\dbinom ni\sum\limits_{j=m}^i(-1)^{i-j}\dbinom ijF(j)\)

\(=\sum\limits_{j=m}^nF(j)\sum\limits_{i=j}^n\dbinom ni\dbinom ij(-1)^{i-j}\)

\(=\sum\limits_{j=m}^nF(j)\sum\limits_{i=j}^n\dbinom nj\dbinom {n-j}{i-j}(-1)^{i-j}\)

\(=\sum\limits_{j=m}^n\dbinom nj F(j)\sum\limits_{i=j}^n\dbinom {n-j}{i-j}(-1)^{i-j}\)

\(=\sum\limits_{j=m}^n\dbinom nj F(j)\sum\limits_{i=0}^{n-j}\dbinom {n-j}{i}(-1)^{i}\)

\(=\sum\limits_{j=m}^n\dbinom nj F(j)[n=j]\)

\(=F(n)\)

第二种形式证明类似。

练习四(洛谷什么时候把这道题传上去的)

有 \(n\) 个元素,问有多少种选择若干个子集的方案,使得选出的子集的交集大小恰好为 \(k\)。

\(0<k\leq n\leq10^6\)

解:直接钦定 \(i\) 个的方案数是 \(F(i)=\dbinom ni(2^{2^{n-i}}-1)\),设答案为 \(G(i)\),观察到

\[F(i)=\sum\limits_{j=i}^{n}{\dbinom {j}{i} G(j)} \]

那么反演即可得到:

\(G(k)=\sum\limits_{i=k}^n\dbinom ik F(i)\)

\(=\sum\limits_{i=k}^n(-1)^{i - k}\dbinom ik \dbinom ni (2^{2^{n-i}}-1)\)

这样之后直接做就行了。

例题一

一句话题意:有两个序列 \({a_i},{b_i}\) 保证所有元素互不相同。你需要重排 \(b\) 序列,使得恰好有 \(k\) 个 \(i\) 满足 \(a_i>b_i\)。

\(0<k\leq n\leq2000\)

解:先将 \(a\) 序列排序。

考虑设 \(dp_{i,j}\) 表示考虑了前 \(i\) 对数,恰有 \(j\) 对 \(a_x>b_x\),发现完全没法转移(

主要是你配大的和配小的总有一个转不了,所以你考虑只算其中一个,也就是钦定有 \(j\) 对数满足 \(a_x>b_x\),发现这样就可以转了。

\[dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}\times(cnt(a_i)-j+1) \]

\(cnt(a_i)\) 表示 \(b\) 序列中比 \(a_i\) 小的数的个数。

然后设 \(f(i)\) 表示钦定了 \(i\) 对的方案数,\(g(i)\) 表示恰好 \(i\) 对的方案数。观察可得:

\((n-i)!dp_{n,i}=f(i)=\sum\limits_{j=i}^n\dbinom ji g(j)\)

\(g(k)=\sum\limits_{i=k} ^n{(-1)^{i-k}\dbinom ik(n-i)!dp_{n,i}}\)

就可以直接做了。

例题二

一句话题意:有一个 \(n\times n\) 的矩阵,将其三染色,使得至少有一行或者一列同色,问方案数。

\(n\leq10^6\)

解:直接钦定 \(i\) 行 \(j\) 列同色:

\(F(i,0)=3^{(n-i)n+i}\dbinom ni\)

\(F(0,j)=3^{(n-j)n+j}\dbinom nj\)

\(F(i,j)=3^{(n-i)(n-j)+1}\dbinom ni\dbinom nj\)

考虑恰好 \(i\) 行 \(j\) 列同色:

\(G(0,0)=3^{n^2}+\sum\limits_{i=1}^n(-1)^{n-i}\dbinom ni(F(0,i)+F(i,0))+\sum\limits_{i=1}^n\sum\limits_{j=1}^n(-1)^{2n-i-j}\dbinom i0\dbinom j0 F(i,j)\)

后面那坨东西带进去:

\(\sum\limits_{i=1}^n\sum\limits_{j=1}^n3^{n^2-ni-nj+ij+1}(-1)^{2n-i-j}\dbinom ni\dbinom nj\)

\(=3^{n^2+1}\sum\limits_{i=1}^n{3^{-ni}(-1)^{n-i}\dbinom ni\sum\limits_{j=1}^n{(3^{n-i})^{j}(-1)^{n-j}\dbinom nj}}\)

\(=3^{n^2+1}\sum\limits_{i=1}^{n}{3^{-ni}(-1)^{n-i}((3^{n-i}-1)^n-(-1)^n)}\)

然后就做完了。

练习五|斯特林数

记 \({n\brace m}\) 表示把 \(n\) 个不同的物品划分为 \(m\) 个集合构成簇的方案数(不允许空集)。

解:记 \(f_{n,m}={n\brace m}\),再记 \(g_{n,m}\) 表示允许空集时的方案数。

容易发现 \(g_{n,m} = \frac{m^n}{m!}\)。

钦定非空集合个数,可以得到:\(g_{n,m}=\sum\limits_{i=1}^m{\binom mi f_{n,i}}\)

那么对其二项式反演可以得到:\(f_{n,m}=\sum\limits_{i=1}^m{(-1)^{m-i}\binom mi g_{n,i}}\)

带入一下就可以得到:\({n\brace m} = f_{n,m}=\sum\limits_{i=1}^m{(-1)^{m-i}\binom mi\frac {m^n}{m!}}=\sum\limits_{i=1}^m{(-1)^{m-i}\frac{m^n}{i!(m-i)!}}\)

min/max容斥

\[\max{S}=\sum\limits_{T\subseteq S}{(-1)^{|T|-1}\min{T}} \\ \max_{k_{th}}{S}=\sum_{T\subseteq S}{(-1)^{|T|-k}\binom{|T|-1}{k-1}\min{T}} \]

\(min/max\) 反过来也成立。

证:\(\max\limits_{k_{th}}{S}=\sum\limits_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}\min T}\)

\(=\sum\limits_{x\in S}x\sum\limits_{x\in T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}[\min{T}=x]}\)

令 \(f(x)\) 表示 \(S\) 中大于 \(x\) 的元素构成的集合。

\(=\sum\limits_{x\in S}{x}\sum\limits_{x\in T\subseteq f(x)}{(-1)^{|T|-k}\dbinom{|T|-1}{k-1}}\)

枚举 \(|T|\):

\(=\sum\limits_{x\in S}{x\sum\limits_{l = 1}^{|f(x)|}{(-1)^{l-k}\dbinom{|f(x)|-1}{l-1}\dbinom{l-1}{k-1}}}\)

\(=\sum\limits_{x\in S}{x\sum\limits_{l=1}^{|f(x)|}{(-1)^{l-k}\dbinom {|f(x)|-1}{k-1}\dbinom{|f(x)|-k}{l-k}}}\)

\(=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}\sum\limits_{l=1} ^{|f(x)|}{(-1)^{l-k}\dbinom {|f(x)|-k}{l-k}}}\)

易知 \(|f(x)|< k\) 时无贡献。

\(=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}\sum\limits_{l=0}^{|f(x)|-k}(-1)^l\dbinom{|f(x)|-k}{l}}\)

\(=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}[|f(x)|=k]}\)

\(=\max\limits_{k_{th}}{S}\)

练习六

给定三个序列 \(a_i,b_i,c_i\),求

\[\sum\limits_{1\leq i<j\leq n}{\max{a_i+a_j,b_i+b_j,c_i+c_j}-\min{a_i+a_j,b_i+b_j,c_i+c_j}} \]

\(n\leq2\times10^5\)

解:暴力拆开那个 \(max\) :

\(\max{a_i+a_j,b_i+b_j,c_i+c_j}\)

\(=\min{a_i+a_j}+\min{b_i+b_j}+\min{c_i+c_j}-\min{a_i+a_j,b_i+b_j}\\-\min{a_i+a_j,c_i+c_j}-\min{b_i+b_j,c_i+c_j}+\\\min{a_i+a_j,b_i+b_j,c_i+c_j}\)

抵消掉最后那一项,剩下的项中,只有一个的是平凡的,有两个的可以二维偏序,总复杂度就是 \(O(n\log{n})\)。

例题三

一句话题意:给 \(n\) 个元素,每次会随机选择一个,有 \(p_i\) 的概率选择第 \(i\) 个,问第一次所有元素都被选择过的期望时间。

\(1\leq n\leq20\)

解:因为 \(min/max\) 容斥都是线性运算,且期望具有线性性,所以可以直接套上期望:

\(E(\max{S})=\sum\limits_{T\subseteq S}{(-1) ^{|T|-1}E(\min{T})}\)

\(E(\min{T})\) 的含义实际上就是第一次选到 \(T\) 中元素的期望时间,可以把 \(T\) 和 \(T\) 的补集看做两个整体,那么一次选中的概率就是 \(\frac 1{\sum\limits_{x\in T}{p_x}}\),期望时间就是其倒数 \(\sum\limits_{x\in T}{p_x}\)

然后直接带进式子里计算即可,\(O(n2^n)\)。

例题四

一句话题意:给 \(n\) 个元素,每次会随机选择一个,有 \(\frac M {p_i}\) 的概率选择第 \(i\) 个,问第一次有 \(k\) 元素被选择过的期望时间。

\(1\leq l\leq n\leq 10^3,n-10\leq k\leq n,\sum\limits_{i=1}^n{p_i}=M\leq10^4\)。

解:相当于求期望出现时间第 \(n-k\) 大,令 \(k\leftarrow n-k\),一样的期望式子列出来:

\(E(\max\limits_{k_{th}}S)=\sum\limits_{T\subseteq S}{(-1)^{|T|-1}\dbinom {|T|-1}{k-1}\frac{m}{\sum\limits_{x\in T}p_x}}\)

直接求肯定 G。因为 \(M\leq10^4\),所以考虑计算每一种 \(\sum\limits_{x\in T}{p_x}\) 作为分母的项的系数之和,再算答案。

考虑设 \(dp_{i,j}\) 表示前 \(i\) 个,分母和为 \(j\) 的项的系数和。

不选很好转移,选的话中间那坨组合数就不太能转的动。

考虑到 \(\dbinom {|T|-1}{k-1}=\frac{|T|-1}{|T|-k}\dbinom{|T|-2}{k-1}\),所以我们可以在方程里及一个 \(l=|T|\),那就可以转了:

\(dp_{i,j,l}=dp_{i-1,j,l}-\frac{l-1}{l-k}dp_{i-1,j-p_i,l-1}\)

但是这个方程是 \(O(n^2m)\) 的,显然过不了,且没用到 \(k\leq10\) 的性质。

又考虑到 \(\dbinom {|T|-1}{k-1}=\dbinom{|T|-2}{k-1}+\dbinom{|T|-2}{k-2}\)

那么只需要在方程中记 \(l=k\) 即可转移:

\(dp_{i,j,l}=dp_{i-1,j,l}+dp_{i-1,j-p_i,l-1}-dp_{i-1,j-p_i,l}\)

就可以 \(O(nmk)\) 了。

标签:ni,dbinom,limits,2024.7,sum,min,笔记,数学,dp
From: https://www.cnblogs.com/JPGOJCZX/p/18336945

相关文章

  • 多项式学习笔记(一)(2024.7.6)
    声明:在本节范围内,所有同余号(多项式运算)均在\((\text{mod}x^n)\)意义下进行;所有等号(代数运算)均在模某个质数\(p\)意义下进行。暴力多项式计算加法\(H(x)=F(x)+G(x)\),求\(H(x)\)解:类比高精度加法\(h_i=f_i+g_i\),复杂度\(O(n)\)#include<bits/stdc++.h>usingnames......
  • [学习笔记]最小割树 (Gomory-Hu Tree)
    本文是在作者阅读多篇博客后糅合而成的,部分内容有雷同。最小割树又称Gomory-Hu树,由RalphEdwardGomory和TeChiangHu于1961年发表的论文中共同提出。最小割树可以在\(n−1\)次最大流中构建,并通过树上RMQ求任意两点之间的最小割。板子题:P4897【模板】最小割树(G......
  • ScottPlot使用笔记
    安装WPF:Install-PackageScottPlot.WPFAvalonia:Install-PackageScottPlot.Avalonia相关网站https://github.com/ScottPlot/ScottPlothttps://scottplot.net/调研情况ScottPlot调研情况:目前可以用ScottPlot来绘制基本的曲线图,柱形图,饼图,雷达图。ScottPlot最新的是5.X......
  • MySQL 学习笔记 进阶(InnoDB引擎 下)
    InnoDB引擎 InnoDB引擎-事务原理-概述事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Co......
  • 【笔记】字符串选讲 2024.8.1
    [COCI2015-2016#5]OOP(Trie)P6727[COCI2015-2016#5]OOP-洛谷|计算机科学教育新生态(luogu.com.cn)正反串分别建Trie,可以搞出两个dfn区间,加之长度限制,三维数点。有\(O(n\logn)\)做法。将字典串\(S[1..m]\),对所有\(1\leqi\leqm\),将\(S[i+1,m]\)的hash值插入......
  • Linux操作系统基础学习笔记(4)
    Linux操作系统基础学习笔记(4)前言4、Linux文件和目录管理常规命令格式(1)列出目录内容和属性(文件)(2)打印工作路径(3)切换工作路径(4)查看文件类型(5)复制文件或目录(6)查找文件或目录(7)创建目录(8)移动或重命名(9)删除文件(不能用来删除文件夹)(10)创建空文件(11)挂载(12)链接(有点像windows的快捷......
  • 组合数学学习笔记(持续完善中)
    基础知识一、加法原理完成某个工作有\(n\)类办法,第\(i\)类办法有\(a_i\)种,则完成此工作的方案数有\(\sum\limits_{i=1}^na_i\)种。二、乘法原理完成某个工作有\(n\)个步骤,第\(i\)个步骤有\(b_i\)种,则完成此工作的方案数有\(\prod\limits_{i=1}^nb_i\)种。......
  • 努力努力努力的第十四天(2024.7.31)
    昨天日期写错了写成2020.7.30,应该是2024.7.31(手滑了哈哈哈)1.行列转换效果演示:这是未经行列转换操作的t_score表:这是经过行列转换后的t_score表:第一步:确定初步的做法使用分组查询(groupby)能够将单个学生的成绩依次查询出来,再加上三列查询(分别定义成'语文''数学''......
  • java笔记2
    4.数组笔记数组概念数组是一种基本的数据结构,用于存储固定大小的相同类型的元素序列。在Java中,数组是一种对象,它实现了java.lang.Cloneable和java.io.Serializable接口。声明数组:int[]intArray;初始化数组:intArray=newint[10];//创建一个长度为10的整型数组......
  • 数学四则运算批计算软件Four mathematical operations Batch Software Cmpt4 download
    数学四则运算批计算软件FourmathematicaloperationsBatchSoftwareCmpt4download该软件能批量计算输入数据的自定义的四则计算。算是一个小型的数学自动化计算的软件。本软件是共享软件,支持Windows64位系统,也可以在兼容WinXP的32位系统上运行。本软件注册费用是48人民币......