当前课程知识点:组合数学 > 容斥原理和鸽巢原理 > 回忆过去,容斥新解 > 容斥原理的应用(4)
我们提到了容斥原理是一个
非常有用的工具
能够解决很多很多的组合问题
那么我们就拿以前
我们学过的题目来看看
是不是能用容斥原理
给一个新的解法呢
比如说我们来看
我们非常熟知的对于不定方程
比如说x1加x2加x3等于
某一个常数
我要求它非负整数解的个数的数目
我们知道我们当时
就可以用隔板法呀
或者直接套用公式
就是Cn加b减1 b
比如说在这个式子中
我们是右端等于15的话
它的答案就是C3加15减1 15
这个题目似乎看着我们已经会做了
但是如果我给你一个约束条件呢
比如说对应于每一个xi来说
它的自变量取值都是有一定范围的
该如何处理呢
刚才那道题目
如果我加上一定的约束
比如说x1的范围是0到5
x2的范围以及x3的范围都是
从一个整数到另一个整数区间
这时候直接套用Cn加b减1b
似乎就不行了
因为它有可能会产生
一个解x1是大于5的
那该怎么做呢
我们是不是可以用
容斥原理来想一想呢
所以我们看在这样一个问题中呢
我们主要要解决的还是
对应于这些约束
比如x1它要在0到5之间
x2要在0到6之间
而x3在0到7之间
如果我们不管
这些所有的约束的话
它实际上就是我们以前
熟知的x1加x2
一直加到xn等于b的这样
一个方程中非负整数解的个数
直接就可以套用cn加b减1b
就可以了
那么对应于这里我们就想到
实际上它加了这些约束之后
我们无非就是想考虑是否能够
去掉它违反约束的情况
那么再仔细分析一下
对应于没有约束的情况下
x1加x2加x3等于15的
非负整数解个数
直接可以求出就是C15加3减1
15等于C17 2
那么对应于如果要违反约束的话
我们一分析会发现
如果违反约束会出现
x1大于等于6的情况
如果x1大于等于6
那么代回到原来的方程中
相当于这个数字应该是比6还大
那是不是我可以进行一下变化呢
假设对应于A1
它表示的是x1大于等于6的
解的个数
这时候我们用y1加6来代替x1
y1加6加x2 加x3等于15
我们把6转移到右边去
实际上就变换成似y1加x2
加x3等于9
这样的一个式子
直接可以套用Cn加b减1 b
A1的个数直接可以求出就是
C9加7减1 9等于C11 2
这是在处理第一个约束
同样我们对于第二个约束呢
对于第二个约束也就是
相当于要想违反它的话
我们可以说x2出现了
大于等于7的时候
跟刚才类似
我们仍然可以设对应的A2表示
x2大于等于7的所有的解的集合
这时候我们用y2加7来代替x2
x1加y2加x3
应该等于15减去7
它的整数解个数就是A2等于
C8加3减1 8等于C12
同样对于第三个约束
x3在0到7之间
如果我们想违反它的话
直接相当于等于x3应该大于等于8
这样我们依次分析设A3表示的就是
x3大于等于8的解的个数
x1加x2加上y9加8等于15
分析之后
A3的个数就等于C(7+3-1,7)
等于C(9,2)
这时候我们设了3个不同的集合
那我们要求的是什么
我们要求的是对应于
这里面没有违反的
也就是说没有违反x1大于等于6的
那么我们要求的是A1的补
而同时对于这个我们也要求
不能违反这个约束
也就是A2的补
对应于第三个约束
我们同样也要求它不违反
因此是A3的补集
对应于它们都必须要不违反的话
那我们就是在求它们的交集
因此我们的答案就应该是
A1补交A2的补
一直交A3的补
既然我们都可以求出来
A1 A2 A3的个数
我们自然可以还去求
A1交A2 A1交A3
套用容斥原理就可以求
出我们想要的答案了
我们依次往下分析
对应于想要求解
但这样约束非负整数解个数
我们可以算出来A1等于C11 2
A2等于C10
对于A3等于C9 2
A1交A2的意思说
对应于第一个约束
我们违反了
因此x1必须是大于等于6的
对于第二个约束
它也违反了
x2应该大于等于7
因此变换成y1加
6加y2加7加x3
等于15
那这时候A1交A2直接套进来是
C(2+3-1,2)等于C(4,2)
同理
可以算A1交A3
可以算A2交A3
同样A1交A2交A3
意味着第一个数字要大于等于6
第二个数字大于等于7
第三个数字大于等于8
正好是6加7加8
对应的已经超过右端项了
因此A1交A2交A3就等于0
这时候我们要求的是
A1的补交A2补交A3补
套用到原来的容斥原理
全集的个数就是
C(17,2)减去C(11,2)
减去C(10,2)
减去C(9,2)
加上C(4,2)
再加上C(3,1)加上1等于10
这就是我们要求的带有
约束情况下的非负整数解个数
-什么是组合数学
--什么是组合数学
--讨论题
-最精巧的排列——幻方
--幻方
-漫谈组合数学--最精巧的排列——幻方
-苦难的羊皮纸卷
--羊皮纸卷
-苦难的羊皮纸卷--作业
-你的手机密码安全吗
-漫谈组合数学--你的手机密码安全吗
-暴力枚举和抽象转换
--世界杯引出的问题
--世界杯引出的问题--练习
--一一对应
--七桥问题
--小结
--讨论题
-大家谈组合数学(1)
--采访武永卫老师
-第一周作业
--作业说明
--H
--U
--G
--作业讨论区说明
-第一周演示程序
--程序讨论区说明
--幻方生成器
--换方计数
--屏幕解锁方案数
--欧拉路计数
--共享程序
-加减乘除来计数
--计数的基本法则
-排列还是组合
--排列还是组合
--小乒乓球的组合之旅--排列还是组合
-各种各样的排列
--圆排列和项链排列
--圆排列和项链排列--习题
--多重排列
--多重排列--练习
-多样的组合
--可重组合
--不相邻组合
--小乒乓球的组合之旅--多样的组合
-钟声里的全排列
--钟声里的全排列
--钟声里的全排列
--字典序法
--SJT算法
-第二周作业
--H
--U
--G
--思考题
--公式测试
--作业讨论区说明
-第二周演示程序
--程序讨论区说明
--全排列生成
--组合生成器
--共享程序
-参考资料:Stirling估计式
-母函数是函数的母亲吗
--母函数的定义(1)--练习
--母函数的定义(2)--练习
-母函数的简单应用
--初识母函数--母函数的简单应用
-整数拆分
--整数拆分(1)
--整数拆分(2)
-Ferrers图像
--Ferrers图像--作业
-母函数与递推关系
--母函数能做什么
--偶数个5怎样算
--母函数小结
-大家谈组合数学(2)
-第三周作业
--H
--U
--G
--思考题
--作业讨论区说明
-第三周演示程序
--程序讨论区说明
--整数拆分
--汉诺塔
--共享程序说明
-Fibonacci数列
--线性常系数递推关系--Fibonacci数列
-Fibonacci数列的应用
--桌布魔术
--桌布魔术--练习
--艾略特波浪曲线
-线性常系数齐次递推关系
--定义
--特征多项式
--线性常系数递推关系--线性常系数齐次递推关系
-说“数”解题
-第四周作业
--H
--U
--G
--GT思考题
--作业讨论区说明
-第四周演示程序
--程序讨论区说明
--程序共享说明
-爆笑花絮
--爆笑花絮
-参考资料:K线分析中的Fibonacci 相关理论
-Catalan数
--计算机界的精灵
--神奇的序列--Catalan数
-指数型母函数
--指数型母函数
--神奇的序列--指数型母函数
-错排
--错排1
--错排2
--神奇的序列--错排
-Stirling数
--神奇的序列--Stirling数
-母函数小结
--母函数小结
-大家谈组合数学(3)
-第五周作业
--H
--U
--G
--思考题
--作业讨论区说明
-第五周演示程序
--讨论区说明
--Catalan数
--程序共享
-且容且斥
--容斥原理
--容斥原理的证明
--容斥原理和鸽巢原理--且容且斥
-容斥原理的精妙
-回忆过去,容斥新解
--容斥原理和鸽巢原理--回忆过去,容斥新解
-鸽子抢巢
--鸽巢原理
--鸽巢原理--练习
--鸽巢原理的应用(1)--练习
-看得见摸得着的鸽巢
--韩信点兵
--中国剩余定理
--容斥原理和鸽巢原理--看得见摸得着的鸽巢
-6人行和Ramsey数
--6人行
--Ramsey数
--小结
-第六周作业
--H
--U
--G
--GT
--作业讨论区说明
-第六周演示程序
--讨论区说明
--程序共享说明
-可以转的世界
--可以转的世界
--可以转的世界--练习
--伽罗华与群
--群的定义
--群的定义--练习
--群的一些概念
-置换群
--置换群
--群--置换群
--共轭类
--对换
--对换--练习
--置换群的应用
-Burnside引理
--着色问题的等价类
--Burnside引理--作业
-闲话群
-第七周作业
--H
--U
--G
--作业讨论区说明
-Burnside引理的困境
-从Burnside到Polya
--Polya定理
-立方体旋转
--立方体旋转(1)
--立方体旋转(2)
--立方体旋转--作业
--立方体旋转(3)
--立方体旋转--作业
--立方体旋转(4)
-母函数型Polya定理
--Polya定理--母函数型Polya定理
-图的计数
--图的计数
-总结
--本章小结
-第八周作业
--H
--U
--G
--GT
--作业讨论区说明
-大家谈组合数学(4)
--采访黄连生老师
-组合之美
--组合之美之计数
-组合之美之线性常系数递推关系
-组合之美之多样的序列
-组合之美之鸽巢原理
-组合之美之转动群与染色
-采访邹欣
--采访邹欣1
--采访邹欣2
-知识点串串烧
--知识点串串烧
-期末测验--期末测验