zoukankan      html  css  js  c++  java
  • [转]容斥原理与多重集合{理论}

    本文转自http://blog.csdn.net/ACdreamers/article/details/9923955

    原博主:ACdreamers

    首先介绍一个重要定理:

    设S是有k种类型对象的多重集合,每种元素均具有无限的重复数。那么S的r组合的个数等于:

    问题一:多重集合的组合问题

    问题描述:给定3个a,4个b,5个c,现在要选10个元素,求一共有多少种组合?

    分析:本问题就是相当于求S={3·a,4·b,5·c}的10组合数。

    首先,多重集合的组合有一个定理,定理描述如下:

    设S是有k种类型对象的多重集合,每种元素均具有无限的重复数,那么S的r组合的个数等于:

    那么既然这样,我们令S∞={∞·a, ∞·b,∞·c},那么S的10-组合数为

    设集合A是S∞的10-组合全体,则|A|=66,现在要求在10-组合中的a的个数小于等于3,b的个数小于等于4,c的个数小于等

    于5的组合数.

    定义性质集合P={P1,P2,P3},其中: 

    P1:10组合中a的个数大于等于4;
    P2:10组合中b的个数大于等于5;
    P3:10组合中c的个数大于等于6;


    将满足性质Pi的10-组合全体记为Ai(1≤i≤3).

    那么,A1中的元素可以看作是由S∞的10-4=6组合再拼上4个a构成的,所以

    同理有:

     

    所以根据容斥原理,原问题的解为:


     

    问题二:方程解的个数问题

    (1)问题描述:已知非负整数不大于7,求方程整数解的个数。

     

    分析:其实用容斥,跟上题一样,先求出总数,因为不可能出现两个或两个以上的数大于等于8,所以这里就简单很多了。

    首先,S的10-组合数为:,由于只会出现中的一个大于等于8的情况,所以四种情况一样的,

    其结果都是,所以问题的解就是286-4*10=246

     

    (2)问题描述:求方程整数解的个数,其中

     

    分析:对于这个问题需要先转化一下就跟上题一样了。

    令:,然后就有,此类问题不再赘述。答案为21


     

     

    问题三:集合划分问题

    问题描述:将一个n元集合划分为r个非空子集,并给每个子集标上号1,2,3,...r,求划分方案数。

    分析:设S为将n元集划分成有序r部分的全部划分方案集,注意这里每一部分可以为空,那么我们用总数减去为空的情况就可

    以了,那么进一步有一个不为空,两个不为空,三个不为空,...等等。这样我们就可以容斥。

    我们知道 ,, 

    所以最后得到方案数为:

  • 相关阅读:
    从通胀说起
    科技见欲迷人眼
    吃货在西安 之 粉丝羊血泡馍
    祝母亲大人福如东海长流水,寿比南山不老松
    久违的蓝调北京
    调和生活前的问题
    《N2CMS实例教程》第四讲:Article Template Page
    《N2CMS实例教程》前言
    《N2CMS实例教程》第一讲:开发环境
    Microsoft Sync Framework 学习实例1文件同步
  • 原文地址:https://www.cnblogs.com/vectors07/p/7976446.html
Copyright © 2011-2022 走看看