Description

今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑。不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m。但是大家来的时间不同,随机次序来机房,带电脑的人直接准备比赛而没带电脑的人需要向带电脑并还没和别人公用的人求助(当然会答应)。但是,如果不存在带电脑并还没和别人公用的人,那他就要等了,等是很让人头疼的,这就不和谐了,当然假如没有这样的情况发生比赛是很和谐的。

Input

输入多组数据,每组数据只有一行m(1<=m<=n<=20)和n(1<=n<=20);

Output

输出和谐比赛的场数。

Sample Input

1 2
3 8
4 17

Sample Output

2
110
4655
这道题可以看成是递推,也可以用组合数学来解,具体就是卡特兰数。
我们把没带电脑的看成0,带电脑的看成1,那么问题就转化成从左向右扫描0的个数不超过1的个数
假设某一位0之前0的累计数等于1的累计数,假设之前有m个1,m个0,
这个0是第2m+1位,之后有2n-m个1和2n-m-1个0,要出现0的累计数大于1的累计个数这种情形,我们可以增加0的个数,
类似于DP那种可以转化问题的思想,但是怎么转化成我们要求解的问题呢?
我们可以将2n-m个1变成0,将2n-m-1个0变成1,转化后就会出现0的累计数大于1的累计个数这种情形。
答案就是卡特兰数c(q,p+q)-c(q+1,p+q);q代表0的个数。
类似于这种转化成01形式求解的还有:
给定一个4*3的棋盘,从左下角到右上角,每次只能向右走或者向上走,有多少种方案?
我们发现要从左下角到右上角只要向右走四步,向上走三步,用1代表向上走,用0代表向右走,那么问题就转化成由4个0和3个1组成的
7位01字符串,这两种形式一一对应,答案就是c(4,7).
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#define LL long long using namespace std; int p, q;
LL f[][]; void Init()
{
memset(f, , sizeof(f));
for (int i = ; i <= ; ++i)
{
f[i][] = ;
}
for (int i = ; i <= ; ++i)
{
for (int j = ; j <= ; ++j)
if(i<j)
f[i][j]=;
else
f[i][j] = f[i-][j] + f[i][j-];
}
}
LL c[][];
void slove()
{
memset(c,,sizeof(c));
for(int i=;i<=;i++)
{
c[][i]=;
c[][i]=i;
c[i][i]=;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
c[j][i]=c[j][i-]+c[j-][i-];
}
double C(int m,int n)
{
double answer1=,answer2=;
for(int i=n-m+;i<=n;i++)
answer1*=i;
for(int i=;i<=m;i++)
answer2*=i;
return answer1/answer2;
}
int main()
{
//freopen("test.in", "r", stdin);
slove();
while (scanf("%d%d", &p,&q) != EOF)
{
printf("%lld\n",c[q][p+q]-c[q+][p+q] );
printf("%.0lf\n",C(q,p+q)-C(q+,p+q) );
Init();
printf("%lld\n", f[q][p]);
}
return ;
}

NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))的更多相关文章

  1. ACM学习历程—NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推)

    Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...

  2. ACM学习历程—NPU1086 随机数 2015年陕西省程序设计竞赛网络预赛(正式赛)C题 (计数排序 || set容器)

    Description 开学了,ACM队的边老板想在学校中请一些妹子一起做一项问卷调查,调查妹子们对ACM的了解情况,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100), ...

  3. ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 && 组合数学 && 大数)

    Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of e ...

  4. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree

    Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...

  5. 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...

  6. 2018中国大学生程序设计竞赛 - 网络选拔赛 1010 YJJ's Salesman 【离散化+树状数组维护区间最大值】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6447 YJJ's Salesman Time Limit: 4000/2000 MS (Java/O ...

  7. 2018中国大学生程序设计竞赛 - 网络选拔赛 1009 - Tree and Permutation 【dfs+树上两点距离和】

    Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  8. HDU 6154 - CaoHaha's staff | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    /* HDU 6154 - CaoHaha's staff [ 构造,贪心 ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 题意: 整点图,每条线只能连每个方格的边或者对角线 问面积大于n的 ...

  9. HDU 6150 - Vertex Cover | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    思路来自 ICPCCamp /* HDU 6150 - Vertex Cover [ 构造 ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 题意: 给了你一个贪心法找最小覆盖的算法,构造一组 ...

随机推荐

  1. 使用windows操作EXCEL如何关闭EXCEL进程

    经常项目上有导入excel的需求,其实导入一个固定格式的excel数据非常容易,但是,发现一个问题就是,导入excel后,用户在打开excel时,必须要打开2次才能打开excel,这让人很不爽:开始查 ...

  2. zoj4027 Sequence Swapping

    首先容易想到二维方程dp(i,j),表示第i个左括号去匹配到第j个右括号时产生的最大值,但如果如此表示的话,首先需要枚举(i,j)以及一个k即dp(i-1,k). 考虑变化dp(i,j)的表示方法,可 ...

  3. java基础编程题

    1. 某公司每月标准上班时间是160小时,每小时工资是30元. 如果上班时间超出了160小时,超出部分每小时按1.5倍工资发放.请编写程序计算员工月工资. package com.num2.lianx ...

  4. CSS布局之BFC和IFC

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6708358.html <这是一篇css2-3的布局规 ...

  5. weblogic集群的资料

    博客分类: weblogic 其实网上关于weblogic集群的资料非常多[大部分都是从创建新的domain开始,我这篇先介绍怎么样把原本普通的domain改造为集群环境],如果觉得不够,可以啃web ...

  6. zmq.error.ZMQError: Address already in use

    1.如下代码,启动的时候python app.py会报如题的错误 app.py #!/user/bin python # -*- coding:utf-8 -*- import os from dat ...

  7. CentOS 6.x Radius

    CentOS 6.x Radius 一.   实现环境: 1.系统:CentOS  release  6.6 (Final) 2.需要软件包: 1) freeradius-2.1.12-6.e16.x ...

  8. Windows7系统下优化固态硬盘

    一.AHCI硬盘模式可提高硬盘性能,确定你的固态硬盘是运行在AHCI模式下,打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicesmsahci” ...

  9. Dell R420 RAID建立以及系统安装

    http://thefallenheaven.blog.51cto.com/450907/1753472 Dell R420的RAID划分,以及系统安装 3块2T的盘,装好硬盘后开机,这里有3种方式去 ...

  10. Office WORD如何输入长下划线

    选中一段文字,点击下划线按钮,可以添加下划线   同样,选中一段空格,点下划线,也可以添加下划线