zoukankan      html  css  js  c++  java
  • 容斥是个什么东西我不会啊?

    注:本文参考了这位大佬的博客,详情请移步——戳我


    容斥

    为什么容斥系数乱七八糟但是最后算出来的答案却是正确的的呢。

    以一个常见的容斥系数为例子:(sum_{i=1}^nC_n^i(-1)^{i+1})

    (=sum_{i=1}^n(C_{n-1}^{i-1}+C_{n-1}^i) imes (-1)^{i+1})

    (=sum_{i=1}^{n}C_{n-1}^{i-1} imes (-1)^{i+1}+sum_{i=1}^{n-1}C_{n-1}^{i} imes (-1)^{i+1})

    (=sum_{i=1}^{n-1}C_{n-1}^{i} imes (-1)^{i+2}+C_{n-1}^0+sum_{i=1}^{n-1}C_{n-1}^{i} imes (-1)^{i+1})

    (=1)

    用容斥原理解决错排问题

    通项公式:
    (ans[n]=n![frac{1}{2!}-frac{1}{3!}+...+(-1)^nfrac{1}{n!}])

    emmm,通项公式没有办法快速算,好像也木有什么用。。。。

    正难则反,不等于的条件范围很大,不好满足,但是等于确是一个很强的约束,所以我们考虑分别计算出一个位置不满足错排、两个位置不满足错排。。。n个位置不满足错排。
    因为我们要求的是错排的个数,所以我们要减去不合法的“一个位置不满足错排”的情况数目,但是减去的同时我们多减了一次“同时两个位置不满足错排”的情况(本来只应该被减一次,但是现在被减去了两次),所以我们要加上。但是这样的话就又多加上了“三个位置不满足错排”的情况。。。。。

    以此类推,故公式为(ans[n]=sum_{i=0}^{n}(-1)^i imes C_n^i imes (n-i)!)

    但是这个玩意儿我们没有办法O(1)地计算,所以继续化简——

    (ans[n]=sum_{i=0}^{n}(-1)^i imes frac{n!}{i!(n-i)!} imes (n-i)!)

    (ans[n]=sum_{i=0}^n(-1)^i imes frac{n!}{i!})

    (ans[n]=sum_{i=0}^{n-1}(-1)^i imesfrac{n!}{i!}+(-1)^n)

    (ans[n]=n*ans[n-1]+(-1)^n)

    容斥都有哪些形式?

    组合数形式

    比如说,对于至少满足一个条件的计算结果,一般长成这个样子——
    (sum_{i=1}^{n}C_{n}^i*f(i)),其中f(i)是容斥系数,对于上述问题来说是(-1)的i+1次方。
    而对于至少满足K个条件的计算结果,则是(sum_{i=1}^nC_n^i(f(i)=[n>=k]))
    看了大佬的博客说,如果我们允许(n^2)的复杂度,完全可以让程序帮忙计算这个容斥系数(来一个预处理就够了),一个一个递推即可。

    斯特林数形式

    还不会,咕咕咕,回来补。

    莫比乌斯函数形式

    还不会,咕咕咕,回来补。

    容斥系数怎么找?

    emmm....凑系数啊!可以打表也可以反演但是我还不怎么会。。。大家还是去看栋栋大佬的博客吧qwqwq

    技巧

    • 平方处理【例题 管道取珠】
      具体的大家可以去看我的题解——已经更新啦!~~
    • 反射法【例题】
      给定 S,T,K, 求每次 +1,−1, 用不超过 K 次操作从 S 变成 T 的方 案数. 每一时刻都不能为负.
  • 相关阅读:
    自娱自乐
    项目冲刺(2)-第二、第三天
    项目冲刺(2)-第一天
    Beta版本冲刺计划及安排
    第一章 构造过程抽象
    python 学习2
    python 学习1
    ionic 初入门
    NodeJS学习
    软件工程实践总结作业——个人作业
  • 原文地址:https://www.cnblogs.com/fengxunling/p/10385609.html
Copyright © 2011-2022 走看看