排列组合是数学中的一个分支。在计算机编程方面也有非常多的应用,主要有排列公式和组合公式。错排公式、母函数、Catalan Number(卡特兰数)等。

一、有关组合数学的公式

1、排列公式   P(n,r)=n!/r!

2、组合公式   C(n,r)=n!/(r!*(n-r)!)  C(n,r)=C(n-1,r)+C(n-1,r-1)

3、错排公式   d[1]=0;   d[2]=1;

d[n]=(n-1)*(d[n-1]+d[n-2])

4、卡特兰数

前几项:1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786,208012…

公式       C(n)=C(2n,n)/(n+1)

5、母函数

数学中,某个序列的母函数是一种形式幂级数,其每一项的系数能够提供关于这个序列的信息。使用母函数解决这个问题的方法称为母函数方法
母函数可分为非常多种,包含普通母函数指数母函数L级数贝尔级数狄利克雷级数。对每一个序列都能够写出以上每一个类型的一个母函数。构造母函数的目的通常是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型。(百度百科)

母函数模板(针对n的分解):

/******************************
题目大意:求分解整数n的个数q(n)
例:
5 = 5;
5 = 4 + 1;
5 = 3 + 1 + 1;
5 = 3 + 2;
5 = 2 + 2 + 1;
5 = 2 + 1 + 1 + 1;
5 = 1 + 1 + 1 + 1 + 1;
sum(5) = 7;不区分顺序,
(3+2)与(2+3)为同一个
*******************************/
int main()
{
int
a[350],b[350],i,j,k,n;
while(
cin>>n&&n)
{
for(
i=0;i<=n;i++){
a[i]=1;
b[i]=0;
}
for(
i=2;i<=n;i++){
for(
j=0;j<=n;j++)
for(
k=0;k+j<=n;k+=i)
b[k+j]+=a[j];
for(
j=0;j<=n;j++){
a[j]=b[j];
b[j]=0;
}
}

cout<<a[n]<<endl;
}
return
0;
}

二、STL中的全排列函数

函数声明:#include  <algorithm>

bool next_permutation( iterator start, iterator end);

next_permutation()函数功能是输出全部比当前排列大的排列。顺序是从小到大。

prev_permutation()函数功能是输出全部比当前排列小的排列,顺序是从大到小。



三、自定义的全排列的函数

void range(int a[],int k,int n){

    if(k==n) {

        for(int i=1;i<=n;i++){

            printf("%d",a[i]);

        }

        printf("\n");

    }

    for(int i=k;i<=n;i++){

        swap(a[k],a[i]);

        range(a,k+1,n);

        swap(a[k],a[i]);

    }



}

四、hdu题目例子

题目一、hdu1027  给出n,m,求n个数的按字典序排列的第m个序列

题目二、hdu1028  求一个正整数n的分解个数

题目三、hdu1171  给出一些物品的价值和个数。分成两份,是这两份的价值相差最小

题目四、hdu1261  给定若干字母和它们对应的个数,计算能够组成多少个不同的字符(高精度)

题目五、hdu1398  给出一个数字n,用给定的序列,求出组成n的全部种类

题目六、hdu1465  错排公式的应用

题目七、hdu1492  求一个数的全部humber bunber的约数的个数

题目八、hdu1570  排列和组合公式的应用

题目九、hdu1716  有四张卡片,用这四张卡片能排列出非常多不同的4位数。从小到大的顺序输出这些4位数

题目十、hdu1799  用递推公式求组合的个数

题目十一、hdu1085 给出1、2、5的个数求出最小不连续的值

ACM~排列组合&amp;&amp;hdu例子的更多相关文章

  1. js 排列 组合 的一个简单例子

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比 ...

  2. HDU 4497 GCD and LCM(分解质因子+排列组合)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...

  3. 4535 ACM 礼尚往来 数学排列组合

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4535 题意:每个礼物都不相同的组合个数 数学规律: 将每个女友排序为1···n,对应的女友送男友的礼物排序 ...

  4. HDU 4045 Machine scheduling (组合数学-斯特林数,组合数学-排列组合)

    Machine scheduling Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. 排列组合+组合数取模 HDU 5894

    // 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...

  6. 排列组合 HDU - 1521 -指数型母函数

    排列组合 HDU - 1521 一句话区分指数型母函数和母函数就是 母函数是组合数,指数型母函数是排列数 #include<bits/stdc++.h> using namespace s ...

  7. HDU 1521 排列组合 指数型母函数

    排列组合 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status D ...

  8. hdu 4451 Dressing 排列组合/水题

    Dressing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. HDU 5816 状压DP&排列组合

    ---恢复内容开始--- Hearthstone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

随机推荐

  1. Ubuntu 16.04实现SSH无密码登录/免密登录/自动登录(ssh-keygen/ssh-copy-id)

    ssh-keygen:产生公钥与私钥(在~/.ssh) ssh-copy-id:将本机的公钥复制到远程机器的authorized_keys文件中(在~/.ssh),ssh-copy-id也能让你有到远 ...

  2. FileReader读取中文txt文件编码丢失问题(乱码)(转)

    有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文 ...

  3. [Go] sync.Once 的用法

    sync.Once.Do(f func()) 是一个非常有意思的东西,能保证 once 只执行一次,无论你是否更换 once.Do(xx) 这里的方法,这个 sync.Once块 只会执行一次. pa ...

  4. VirtualBox 在WIN7 X64 安装报错 获取VirtualBox COM对象失败,Unable to start the virtual device

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\CLSID\{---C000-}\InprocServer32] @="C:\ ...

  5. 项目内部IT/电商/信息化类简报,分享电子版

    除了一些国内不准发的内容,还有公司内部项目相关的.其他的大多数资料会在微信公众号推送,分享一下吧,希望大家也能推荐一些好文章. 微信公众号:WallinWind,原创IT类文章在CSDN博客也会同步更 ...

  6. 安装oracle环境变量path的值大于1023的解决办法

    介绍解决安装oracle安装问题 方法/步骤     安装oracle 10g时遇到环境变量path的值超过1023字符,无法设置该值,如图: ‍ 安装oracle 10g时遇到环境变量path的值超 ...

  7. Spring整合Disruptor

    原文:https://segmentfault.com/a/1190000014469173 什么是Disruptor 从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列.那 ...

  8. dispatch_group_async 使用详解

    dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作.这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了.下面是一段例子 ...

  9. 培养iOS开发新人的一个思路

    坚持两个方法论: 1.发现问题的方法:(熟悉代码的过程) (1)照着一个完整的工程,从最基本的页面开始做起.不懂的地方就问,就查. (2)在阅读代码或拿到需求后要学会对问题进行分解.一个陌生的问题如果 ...

  10. Reflector_8.3.0.93_安装文件及破解工具

    Reflector_8.3.0.93_安装文件及破解工具 下载地址:http://pan.baidu.com/s/1jGwsYYM   约 8.9MB