题意:将1~2n个数依照顺时针排列好。用一条线将两个数字连接起来要求:线之间不能有交点。同一个点仅仅同意被连一次。

最后问给出一个n,有多少种方式满足条件。

分析:

ans[n]表示n的中的种类数。 规定ans[0] = ans[1] = 1;

如果给出的数是n那么从1開始, 与1之间相连的数与1之间间隔的对数各自是0, 1, 。。n-1, 那么我们就能够将他们切割成两部分,对于每一部分我们分别将其的结果求出,之后再相乘就是间隔对数s(s是0, 。。

n-1)的总的种类数。

最后我们能够总结出ans[n] = ans[0]*ans[n-1]+ans[1]*ans[n-2]+...ans[n-1]*ans[0];即为卡特兰数。

如果给出的是4。那么一共同拥有8个数。依照顺时针排列,我们如果从1開始,那么1能够与2(之间相差0个数), 4(之间相差2个数), 6(之间相差4个数), 8(之间相差6个数)。假如我们知道相差n个数的的种类数,那么我们仅仅须要将他们相加。即为我们所要求的总种类数。

以下我就依照上面的样例即n=4分析一下。

相差为0的时候,我们仅仅须要考虑剩下的三对就可以。则相差为0的种类数就为ans[3]*ans[0],之间相差2的时候我们就吧原有的序列分成了两部分,第一部分仅仅有2个数。第二部分有4个数。那么相差为2的种类数就是ans[2]*ans[1];相差为4的事实上就是上面情况的第一部分和第二部分颠倒了,这样的情况下的种类数是ans[1]*ans[2],相差为6就是第一种情况的颠倒,所以种类数是ans[3]*ans[0];

代码:

#include <cstdio>
#include <cstring>
int ans[102][100]; void table(){
ans[0][0] = ans[1][0] = 1;
int i, j;
for(i = 2; i < 102; i ++){
int c = 0;
for(j = 0; j < 100; j ++){
ans[i][j] = ans[i-1][j]*(4*i-2)+c;
c = ans[i][j]/10;
ans[i][j] %= 10;
}
int z = 0;
for(j = 99; j >= 0; j --){
z= z*10+ans[i][j];
ans[i][j] = z/(i+1);
z %= (i+1);
}
}
}
int main(){
table();
int temp;
while(scanf("%d", &temp), temp != -1){
int i = 99;
while(ans[temp][i] == 0) i --;
while(i >= 0) printf("%d", ans[temp][i]), i--;
printf("\n");
}
return 0;
}

题目链接:

pid=164">http://acm.nyist.net/JudgeOnline/problem.php?pid=164

     http://poj.org/problem?id=2084

nyoj 164&amp;&amp;poj2084 Game of Connections 【卡特兰】的更多相关文章

  1. POJ2084 Game of Connections 卡特兰数 关于卡特兰数经典的几个问题

    Game of Connections Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9128   Accepted: 44 ...

  2. [POJ2084]Game of Connections

      Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7888   Accepted: 3965 Description Thi ...

  3. POJ2084 Game of Connections(数学,dp)

    题目链接. 分析: 简单的 Catalan 数 将x~y编号,设解为 d(x, y), d(x, y) = {d(x+1,i-1)*d(i+1,y)}, 其中 x+1<= i  <= y, ...

  4. (组合数学3.1.2.2)POJ 2084 Game of Connections(卡特兰数公示的实现)

    package com.njupt.acm; import java.math.BigInteger; import java.util.Scanner; public class POJ_2084 ...

  5. POJ 2084 Game of Connections 卡特兰数

    看了下大牛们的,原来这题是卡特兰数,顺便练练java.递归式子:h(0)=1,h(1)=1   h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) ( ...

  6. (Catalan数 大数) Game of Connections poj2084

    Language: Game of Connections Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8837 Accept ...

  7. How to enable remote connections to SQL Server

    <img src="https://miro.medium.com/max/1400/1*18lrHvJ8YtADJDT7hxIThA.jpeg" class="g ...

  8. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  9. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

随机推荐

  1. Unix IPC之共享内存区(1)

    1 共享内存区 共享内存区是可用IPC形式中最快的,只有映射和解除映射需要进入内核的系统调用,映射后对共享内存区的访问和修改不再需要系统调用(内核只要负责好页表映射和处理页面故障即可),但通常需要同步 ...

  2. PHP性能调优---php-fpm中启用慢日志配置(用于检测执行较慢的PHP脚本)

    虽然通过nginx accesslog可以记录用户访问某个接口或者网页所消耗的时间,但是不能清晰地追踪到具体哪个位置或者说函数慢,所以通过php-fpm慢日志,slowlog设置可以让我们很好的看见哪 ...

  3. 减小VirtualBox虚拟硬盘文件的大小

    虚拟机使用久了就会发现虚拟硬盘越来越大,但是进入虚拟机里的系统用命令看了下,实际占用的空间远没有虚拟硬盘大小那么大,这个让人很不爽,而且在分享虚拟机镜像的时候也很不方便.VirtualBox似乎没有提 ...

  4. 洛谷P3605 [USACO17JAN] Promotion Counting 晋升者计数 [线段树合并]

    题目传送门 Promotion Counting 题目描述 The cows have once again tried to form a startup company, failing to r ...

  5. JAVAEE——BOS物流项目14:Linux部署(安装jdk、tomcat、mySQL)和扩展资料

    1 学习计划 1.Linux部署 n 安装jdk n 安装tomcat n 安装MySQL n 将项目发布到tomcat 2.扩展资料 2 Linux部署 2.1 安装jdk 第一步:获取Linux系 ...

  6. 为什么Java7开始在数字中使用下划线

    JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量.其中的一个特征是介绍字面常量数字的下划线.从Java7开始,你就可以在你的Java代码里把长 ...

  7. gpfs 内核错误

    centos7.3安装旧的GPFS引发内核错误 没有关闭之前是可以查看到smap cat /proc/cpuinfo | grep smap 系统层关闭,也可以正常使用gpfs grubby --up ...

  8. python opencv3 cornerHarris 角点检测

    git:https://github.com/linyi0604/Computer-Vision 角点也是处在一个无论框框往哪边移动 框框内像素值都会变化很大的情况而定下来的点 如果框框水平方向上移动 ...

  9. Linux设备驱动模型(sysfs)

    <总线模型概述> 随着技术的发展,系统的拓扑结构也越来越复杂,对热插拔.跨平台移植性的要求越来越高,从Linux2.6内核开始提供全新的设备模型.将所有的驱动挂载到计算机的总线上(比如US ...

  10. 通过TortoiseGit上传项目到GitHub

    1.安装msysgit和TortoiseGit : 2.TortoiseGit 设置: (1).确保安装成功: (2).设置用户名和邮箱: 3.登陆github并进入设置页面: 4.添加 SSH Ke ...