POJ 2084 Game of Connections 卡特兰数+JAVA -

本文介绍了解决POJ 2084问题的一种方法,通过递推实现卡特兰数的计算。利用BigInteger处理大整数运算,避免溢出。文中提供了一个完整的Java实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址:http://poj.org/problem?id=2084

递推地方法:

假设有n对点,答案为f(n)

假设第一个点连接了第2*k+1个点,那么此时答案为f(k)*f(n-k-1),左边k对点和右边n-k-1对点

利用加法原理,n对点,一共有∑f(k)*f(n-k-1) {k>=0&&k<n}

也就是卡特兰数

利用BigInteger就好了

import java.util.*;
import java.math.*;
import java.text.*;
import java.io.*;

public class Main
{

	public static void main(String[] args) {
		Scanner cin = new Scanner(new BufferedInputStream(System.in));

		BigInteger[] d = new BigInteger[100+5];
		d[0] = BigInteger.ONE;
		d[1] = BigInteger.ONE;
		d[2] = BigInteger.valueOf(2);
		for(int i=3;i<=100;i++){
			BigInteger temp=BigInteger.ZERO;
			for(int k=0;k<=i-1;k++) temp=temp.add(d[k].multiply(d[i-k-1]));
			d[i]=temp;
		}

		while(cin.hasNext()){
			int n=cin.nextInt();
			if(n==-1) break;
			System.out.println(d[n]);
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值