时间限制:1 s

空间限制:128 M

题目描述

有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置互换,也算是一种新的排法。(M<=10)

输入

输入一行,M,N,K(其中M=N+K,M<=10).

输出

输出一行,总的排队方案。

样例输入

4 2 2

样例输出

8

思路:思路挺简单的,先不管每个小孩的不一样,先算出来总共排列有多少种,再乘以 n 和 k 的阶乘就是答案了(乘以 n 和 k 的阶乘就是把 1 和 2 全排列),至于怎么算出来排列的种类,用递归算出来就可以了。

代码:

 #include <iostream>
#include <cstdio> using namespace std;
int m, n, k, sum; int fun(int ye, int nn, int kk) // ye表示余额,nn表示1元小孩人数,kk表示2元剩余人数
{
if(ye < ) return ; //余额小于零,队列无效
if(!nn && !kk) return ; //某个量排完,剩余位置只能排剩余的种类,因为这里n >= k
//保证剩下的排列合法,不会出现如:1 1 2 2 2 2 2 这种不合法的情况
if(!ye) return fun(ye + , nn - , kk); //余额为零,所以下一位只能排1元的位置
return (fun(ye + , nn - , kk) + fun(ye - , nn, kk - )); //每次每个位置能排 1 和 2 两种类型的位置
}
int main()
{
cin >> m >> n >> k;
if(n < k) cout << ""; //1的数量比2少的话不可能出现合法序列
else
{
sum = fun(, n - , k); //保证第一位一定排1,不然队列不合法
int x1, x2;
x1 = x2 = ;
for(int i = ; i <= n; i ++ ) x1 *= i; for(int i = ; i <= k; i ++ ) x2 *= i; sum = sum * x1 * x2;
cout << sum;
}
return ;
}

PS:还有一种更快的算法,卡特兰数,百度出来的,呃,我也不太会,感兴趣的可以看下

安科 OJ 1054 排队买票 (递归,排列组合)的更多相关文章

  1. 杭电1133 排队买票 catalan

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. 安科 OJ 1190 连接电脑 (并查集)

    时间限制:1 s 空间限制:128 M 传送门:https://oj.ahstu.cc/JudgeOnline/problem.php?id=1190 题目描述 机房里有若干台电脑,其中有一些电脑已经 ...

  3. JDOJ 1928: 排队买票

    JDOJ 1928: 排队买票 JDOJ传送门 Description 一场演唱会即将举行.现有n个歌迷排队买票,一个人买一张,而售票处规定,一个人每次最多只能买两张票.假设第i位歌迷买一张票需要时间 ...

  4. [HZNUOJ1524]排队买票(DP)

    题目链接:http://acm.hznu.edu.cn/JudgeOnline/problem.php?id=1524 简单分析后可以知道每一个手持两元的小朋友前面,售票员手里至少有一个一元. 假设d ...

  5. <经验杂谈>介绍Js简单的递归排列组合

    最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...

  6. sdut oj 排队买饭

    数据结构实验之队列一:排队买饭 Time Limit: 1000MS Memory limit: 65536K 题目描述 中午买饭的人特多,食堂真是太拥挤了,买个饭费劲,理工大的小孩还是很聪明的,直接 ...

  7. 从Wannacry到WannaRen:螣龙安科带你深度分析勒索病毒原理

    从Wannacry到WannaRen:螣龙安科2020年4月7日,360CERT监测发现网络上出现一款新型勒索病毒wannaRen,该勒索病毒会加密windows系统中几乎所有的文件,并且以.Wann ...

  8. FZU 2029 买票问题 树状数组+STL

    题目链接:买票问题 思路:优先队列维护忍耐度最低的人在队首,leave操作ok. vis数组记录从1到n的编号的人们是不是在队列中,top维护队首的人的编号.pop操作搞定. 然后,check操作就是 ...

  9. java多线程编程(3)买票

    1,买票非同步版本 http://www.cnblogs.com/anbylau2130/archive/2013/04/17/3025347.html很详细 public class 多线程2 { ...

随机推荐

  1. http怎么做自动跳转https

    Nginx版本 server { listen       80; server_name  localhost; rewrite ^(.*)$ https://$host$1 permanent; ...

  2. python3.x Day3 集合

    python中的集合 集合定义:一个无序的去重的数据集,主要特性就是去重和关系测试,关系测试不改变集合中的数据值 定义集合:set(list) 可以将list转化为集合set 示例: 定义一个集合:l ...

  3. jQuery选择器及常见操作

    jQuery http://jquery.cuishifeng.cn/ 模块 <=>类库 DOM/BOM/JavaScript的类库 版本: 1.x 1.12 2.x 3.x 转换: jq ...

  4. Linux 复习一

    第一章 Linux简介和基本操作 一.Linux系统的来源和发展 Linux is a free Unix-type operating system originally created by Li ...

  5. 藏妹子之处(excel)

    问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同 ...

  6. 关于使用CELERY的一点心得

    使用也有大半年了.稳定性没话说啊. 但有一个坑,是我以前没注意的,记录下来. 就是本来一个任务是可以异步并行执行的..但如何需要CELERY的执行结果来作判断的话,就会变得异步串行的. 这要值得注意. ...

  7. H - Parity game 并查集

    Now and then you play the following game with your friend. Your friend writes down a sequence consis ...

  8. AWR and ADDM

    The Automatic Workload Repository Oracle collect a vast amount of statistics regarding the performan ...

  9. Android: ADB not responding. You can wait more, or kill “adb.exe”

    Windows Only: Open a command prompt with administration permission and type netsh interface tcp set ...

  10. Node.js 博客实例(三)添加文件上传功能

    原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 For ...