【组合数学入门+例题】

前言

组合数学是数论的一部分,应该算是入门,但是卡常的组合数题目真的是毒瘤

简介

(摘自知乎)

组合数学(Combinatorics)是纯数学的一个分支,主要研究离散、有限或可数的数学结构。
除了纯数学,组合数学在应用数学、理论物理、计算机科学等分支也有着很多应用。在计算机科学中,组合数学又被称作 “离散数学”。
在美国数学会的学科分类中,组合数学下设五个子学科,分别为:计数组合、设计理论、图论、极值组合、代数组合。

基础知识点:组合数

从\(n\)个不同元素中,任取\(m(m≤n)\)个元素并成一组,叫做从\(n\)个不同元素中取出\(m\)个元素的一个组合;从\(n\)个不同元素中取出\(m(m≤n)\)个元素的所有组合的个数,叫做从\(n\)个不同元素中取出\(m\)个元素的组合数。
我们通常用\(C^n_m\)来表示上面这种情况。
基础计算公式:
\(C^n_m=\frac{m!}{n!(m-n)!}\)

例题部分

1.[HNOI2008]越狱
2.SAC#1 - 组合数
3.妖梦拼木棒
(\(luogu\)上都能搜到)

重点讲讲第二个
题目的意思是:
给定一个n,求\(\begin{matrix} \sum_{i=1}^N C(n,i) \end{matrix}\),这里的\(C(n,i)\)表示在n件物品里无序选取i件的组合数,当然,题目限制i必须是偶数。
首先:
\(C_n^0+C_n^1+C_n^2+...+C_n^n=2^n\)
这个应该不难理解,可以理解为每件物品都有选或者不选,件数不限,所以可以用\(2^n\)表示总和。
其次:
\(C_n^0-C_n^1+C_n^2-C_n^3+(-1)^nC_n^n=0\)
根据上面那个式子就可以得到这个。最后一项的符号根据n来确定。
所以:
\(C_n^0+C_n^2+C_n^4+...=C_n^1+C_n^3+C_n^5+...=2^{n-1}\)
第二个式子就告诉我们,正数项和负数项的数值和是相同的,所以总和是0,第一个式子也可以得出这两个相同值的式子的和是2^n,所以它们各自值的绝对值就是\(2^{n-1}\).
所以,题目中所求的,用快速幂就可以很快求出来...
代码:

#include<bits/stdc++.h>
using namespace std;
long long qpow(long long a,long long b,long long p)
{
    long long x=a;
    long long ans=1;
    while(b)
    {
        if(b&1)
            ans*=x;
        ans%=p;
        (x*=x)%=p;
        b>>=1;
    }
    return ans;
}
int main()
{
    long long a,b,p;
    cin>>b;
    cout<<qpow(2,b-1,6662333)<<endl;
    return 0;
}

另外两道题目讲讲思路吧:
1.越狱这道题一样用推导公式,首先算出所有犯人加在一起的所有状态,减去所有相邻房间的犯人的宗教不相同的情况,即为答案。
3.木棍长度最长才5k,外层枚举有两根的长度的木棍,然后内层循环找另外两根更短的能够组成第三边的,找到了就方案数++.
ov.
摸鱼酱.

原文地址:https://www.cnblogs.com/moyujiang/p/11249069.html

时间: 2024-10-10 09:25:01

【组合数学入门+例题】的相关文章

组合数学入门

组合数学的意义广泛,但是OI联赛中常用的是排列组合,所以我就先写一点排列组合的知识,联赛后补上更多的内容,在此之前不了解排列组合基本知识的同学建议移步信息学奥赛一本通初赛篇,讲得很好.本文章虽然也是入门,但我懒得写详细介绍,所以直接开始讲基础知识啦. 由于博客园的LaTeX很不方便,我就不写LaTeX了. 组合的表示:C(n,m)表示从n个数当中选m个出来的方案数. 排列的表示:A(n,m)表示从n个数中找出m种排列. 排列组合的基本性质 1.C(n,m)=C(n-1,m)+C(n-1,m-1)

dfs与dp算法之关系与经典入门例题

目录 声明 dfs与dp的关系 经典例题-数字三角形 - POJ 1163 题目 dfs思路 解题思路 具体代码 dp思路 解题思路 具体代码 声明 本文不介绍dfs.dp算法的基础思路,有想了解的可以自己找资源学习. 本文适合于刚刚接触dfs和dp算法的人,发现两种算法间的内在联系. 本人算法之路走之甚短,如果理解出现问题欢迎大家的指正,我会分享基于我目前理解到的算法思想. dfs与dp的关系 很多情况下,dfs和dp两种解题方法的思路都是很相似的,这两种算法在一定程度上是可以互相转化的. 想

Treap学习基本入门

Treap标准学习模板 1.treap的基本了解 (1)splay与treap的区别 Splay的旋转操作是将普通节点转到根 而treap是将根转为普通节点 (2)treap的时空复杂度 treap的各项操作时间复杂度均摊为O(logn). 由于treap的指针写法容易出错,所以通常用数组代替. 通常要有以下几种: v[]--存放键值 rnd[]--存放随机出的优先级 l[],r[]--左右子树的下标 w[]--相同键值的个数 s[]--以该结点为祖先的节点个数(包括自己) 2.treap基本操

python控制结构、迭代器和生成器(个人笔记)

参考:https://docs.python.org/2.7/reference/compound_stmts.html#whilehttps://www.cnblogs.com/lclq/p/5586198.html (python的运算与表达式)https://www.zhihu.com/question/20829330 (python的迭代器)https://www.cnblogs.com/devin-guwz/p/5738676.html(python入门例题) python中的真假:

决策单调性优化dp

决策单调性: 对于一些dp方程,经过一系列的猜想和证明,可以得出,所有取的最优解的转移点(即决策点)位置是单调递增的. 即:假设f[i]=min(f[j]+b[j]) (j<i) 并且,对于任意f[i]的决策点g[i],总有f[i+1]的决策点g[i+1]>=g[i](或者<=g[i]) 那么,这个方程就具备决策单调性. 这个有什么用吗? 不懂具体优化方法的话确实也没有什么用.可能还是n^2的.只不过范围可能少了一些. 经典入门例题: Description: [POI2011]Ligh

数位dp——奏响数字数位的美妙乐章

数位dp:处理数字数位关系的一种dp方式. 一般的题目特征十分明显: 1.一般和数字本身有很大关系. 2.一般求数字在区间L,R中的一些信息 3.L,R一般很大,通常能达到long long级别. dp方式也比较有套路: 一般有三种方法: 本质上的相似之处,都是集中在处理"填数有无限制","填数无限制情况下的固定方案数","某些已经搜出来的固定方案数" 1.记忆化搜索(没用过) 是一种倒着记忆的方法. 2.递推(我基本都是这个方法) 正着递推出答

算法入门经典第六章 例题6-14 Abbott的复仇(Abbott&#39;s Revenge)BFS算法实现

Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 Sample Output (3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3) 析 题目的大意是,输入起点,离开起点时的朝向和终点,求一条最短路. 每一个

[入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)

转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识……这真的是一种很锻炼人的题型…… 每一道题的状态都不一样,并且有不少的分类讨论,让插头DP十分锻炼思维的全面性和严谨性. 下面我们一起来学习插头DP的内容吧! 插头DP主要用来处理一系列基于连通性状态压缩的动态规划问题,处理的具体问题有很多种,并且一般数据规模较小. 由于棋盘有很特殊的结构,使得它可以与“连通性”有很强的联系,因此插头DP最常见的应用要数

算法入门经典第六章 例题6-5 移动盒子

例题 6-5 移动盒子(Boxes in a Line, UVa127675) 问题 给定一行盒子,从左到右编号依次为1,2,...,n.可以执行以下命令: 1 X Y 把盒子 X 移动到 Y 的左边(如果已经在左边,忽略此命令) 2 X Y 把盒子 X 移动到 Y 右边(如果X已经在Y的右边,忽略此命令) 3 X Y交换 X 和 Y 的位置 4 把整个顺序颠倒 指令保证合法,即X 不等于 Y, 输入包含不超过10组数据,每组第一行为盒子的数目n和指令的数目m(1<=n,m<=100000).