nyoj 164&&poj2084 Game of Connections 【卡特兰】
题意:将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&&poj2084 Game of Connections 【卡特兰】的更多相关文章
- POJ2084 Game of Connections 卡特兰数 关于卡特兰数经典的几个问题
Game of Connections Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9128 Accepted: 44 ...
- [POJ2084]Game of Connections
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7888 Accepted: 3965 Description Thi ...
- 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, ...
- (组合数学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 ...
- 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) ( ...
- (Catalan数 大数) Game of Connections poj2084
Language: Game of Connections Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8837 Accept ...
- How to enable remote connections to SQL Server
<img src="https://miro.medium.com/max/1400/1*18lrHvJ8YtADJDT7hxIThA.jpeg" class="g ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
随机推荐
- Google Chrome中的高性能网络-[译]《转载》
以下内容是"The Performance of Open Source Applications" (POSA)的草稿, 也是The Architecture of Open S ...
- JavaScript之MV*模式
前言 在前端技术的快速发展过程中,MVC(模型-视图-控制器).MVP(模型-视图-表示器)和MVVM(模型-视图-视图模型)也得到了很多使用.然而,这三种框架模式非常相似,不易分清,易于混淆.本文重 ...
- 嵌入式 探讨父子线程、进程终止顺序不同产生的结果_skdkjxy_新浪博客
嵌入式 探讨父子线程.进程终止顺序不同产生的结果 Linux下编程,线程.进程退出顺序问题纷纷扰扰,如果父进程/线程先于子进程/线程终止,系统会做什么处理呢?反之,如果子进程/线程先于父进程/线 程终 ...
- 让你的 JMeter 像 LoadRunner 那样实时查看每秒事务数(TPS)、事务响应时间(TRT)
熟悉 LoadRunner 的朋友一定不会对其 TPS(每秒事务数).TRT(事务响应时间) 等视图感到陌生,因为这是压力测试最为关键的两个指标.JMeter 以其开源.轻巧.灵活.扩展性高等特性赢得 ...
- Eclipse+Tomcat+Axis2+ADT开发环境配置
一.安装Eclipse和Tomcat 1.安装Eclipse: 2.解压缩安装apache-tomcat-6.0.41 3.tomcat配置环境变量(4个) TOMCAT_HOME D:\An ...
- CF475C. Kamal-ol-molk's Painting
C. Kamal-ol-molk's Painting time limit per test 2 seconds memory limit per test 256 megabytes input ...
- python mysql连接函数
def mysqlConnectionSql(sql,value): try: conn=MySQLdb.connect(host='127.0.0.1',user='webuser',passwd= ...
- codeforces Educational Codeforces Round 9 E - Thief in a Shop
E - Thief in a Shop 题目大意:给你n ( n <= 1000)个物品每个物品的价值为ai (ai <= 1000),你只能恰好取k个物品,问你能组成哪些价值. 思路:我 ...
- 43:n个骰子的点数
算法分析: 算法1.基于递归求色子点数,时间效率不高 现在我们考虑如何统计每一个点数出现的次数.要向求出n个骰子的点数和,可以先把n个骰子分为两堆:第一堆只有一个,另一个有n-1个.单独的那一个有可能 ...
- 为什么要使用String
最近在培训课期间指导初学者.任务之一就是要大家完成一个类,要求这个类对key为String类型的map执行dwarwle操作.其中一位学员完成的类中,有如下方法: void dwarwle(HashM ...