组合数学入门

组合数学的意义广泛,但是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)

2.C(n,m)=n!/(m!*(n-m)!)

3.A(n,m)=n!/(n-m)!

4.∑ni=0C(n,i)=2n

5.二项式定理:(x+y)n=∑ 0<=k<=n C(n,k)xkyn-k

看到这里大家一定对排列组合有了一些基本了解了,辣么我们来做一些可爱的小练习吧!!

排列组合入门经典例题

例1 POJ1942 Paths On A Grid

有一张n*m的网格纸,求从左下到右上的方案数,每次只能向上或向右走。

分析:如果我们要从左下走到右上,那么一共就会走n+m步,而这n+m步当中我们有n步是在往上走的,由于每一步向右或者向上走都会计算成不同的方案,所以n+m中可以选不同的位置来走这n步,所以最后的方案就是C(n+m,n),可能有同学会问,为啥不是n+m选m个呢?其实你把它代入公式后就会发现,结果是一样的2333..答案绝对不是C(n+m,n)+C(n+m,m),因为你在选择一种n步的时候那么另外m步就确定了,相加就重复了。

代码:

#include<cstdio>
#define min(x,y) ((x)<(y))?(x):(y)
unsigned long long n,m;
int main()
{
    while(~scanf("%llu%llu",&n,&m))
    {
    if(!n&&!m)break;
    unsigned long long sum=n+m;
    n=min(n,m);
    unsigned long long ans=1;
    for(int i=1;i<=n;i++)
    ans*=(sum-i+1),ans/=i;
    printf("%llu\n",ans);
    }
    return 0;
} 

原文地址:https://www.cnblogs.com/valentino/p/11657101.html

时间: 2024-08-11 07:09:29

组合数学入门的相关文章

【组合数学入门+例题】

前言 组合数学是数论的一部分,应该算是入门,但是卡常的组合数题目真的是毒瘤 简介 (摘自知乎) 组合数学(Combinatorics)是纯数学的一个分支,主要研究离散.有限或可数的数学结构. 除了纯数学,组合数学在应用数学.理论物理.计算机科学等分支也有着很多应用.在计算机科学中,组合数学又被称作 "离散数学". 在美国数学会的学科分类中,组合数学下设五个子学科,分别为:计数组合.设计理论.图论.极值组合.代数组合. 基础知识点:组合数 从\(n\)个不同元素中,任取\(m(m≤n)\

【组合数学】 01 - 关于“摆放”的科学

在中学大家都学过<排列组合>,计算机系的在大学里还学过<离散数学>.不同于主流数学中的研究对象(连续变量),它们主要讨论离散对象之间的布局.这些问题随处可见,最多见于形形色色的智力趣题和数学游戏.它们涉及的数学知识比较初等,但需要很强的技巧和脑力,至今未解的世界难题也是俯拾皆是.精确概括这些问题的共同点也是比较困难的,解法本身也没有形成统一的理论体系,往往以各种松散的方法和技巧为主. 宽泛地讲,能算作离散对象的学科非常多,它甚至可以包括逻辑学.代数学和几何学,这些已经形成理论体系的

ACM入门指南

什么是ACM? 想必打开这篇博客的人已经知道什么是ACM了吧,如果不知道,请自行百度或者谷歌 搞ACM需要学习什么知识? 搜索引擎 这里不是让你设计一个搜索引擎,而是让你学会正确使用搜索引擎,当你有任何不解的时候(包括阅读下文),问问谷歌或者百度,这不只是ACM才需要的技能. 一门编程语言 虽然现在编程语言总类繁多,有些OJ也支持多种语言,不过C++还是搞ACM不二的选择,另外最好也学会使用java,因为无论在什么地方,什么国家,什么网站的比赛,C++和java都是支持的.ACM是算法的比拼,所

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

R语言快速上手入门

R语言快速上手入门 课程学习网址:http://www.xuetuwuyou.com/course/196 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本教程深入浅出地讲解如何使用R语言玩转数据.课程中涵盖R语言编程的方方面面,内容涉及R对象的类型.R的记号体系和环境系统.自定义函数.if else语句.for循环.S3类R的包系统以及调试工具等.本课程还通过示例演示如何进行向量化编程,从而对代码进行提速并尽可能地发挥R的潜能.本课程适合立志成为数据科学家的

笔记:Spring Cloud Zuul 快速入门

Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了所有其他微服务的实例信息,这样的设计非常巧妙的将服务治理体系中维护的实例信息利用起来,使得维护服务实例的工作交给了服务治理框架自动完成,而对路由规则的维护,默认会将通过以服务名作为 ContextPath 的方式来创建路由映射,也可以做一些特别的配置,对于签名校验.登录校验等在微服务架构中的冗余问题

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

JAVA通信系列二:mina入门总结

一.学习资料 Mina入门实例(一) http://www.cnblogs.com/juepei/p/3939119.html Mina入门教程(二)----Spring4 集成Mina http://www.cnblogs.com/juepei/p/3940396.html Apache Mina 入门实例--创建一个MINA时间服务http://loftor.com/archives/apache-mina-quick-start-guide.html MINA2.0用户手册中文版--系列文