HDU-3723-DeltaWave

/*这道题也是卡特兰数的一个很好的练习
<pre name="code" class="java">T[k]是存在<span style="font-family: Arial, Helvetica, sans-serif;">k对上下时解的个数,T[k] = C(n, 2 * k) * CAT[k]  (CAT[k]是卡特兰数第k项,0 <= k <= n / 2)</span>
<span style="font-family: Arial, Helvetica, sans-serif;">ans = T[0] + T[1] + ...+T[n/2]</span>
<span style="font-family: Arial, Helvetica, sans-serif;">T[k] / T[k-1] = (n - 2k + 2) * (n - 2k + 1) / (k * (k + 1))</span>
 
*/
import java.math.BigInteger;
import java.util.Scanner;
/*
 * hdu 3723 Delta Wave
 * slowlight
 * 2014-7-13
 * 卡特兰数 H(n) = H(0)*H(n-1)+H(1)*H(n-2)...+H(n-1)*H(0) = C(2n, n)/(n + 1)
 */
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		BigInteger mod = BigInteger.TEN.pow(100);
		BigInteger sum;
		BigInteger t;
		
		while(scanner.hasNext()) {
			int n = scanner.nextInt();
			//System.out.println("n= " + String.valueOf(n));
			int limi = n / 2;
			sum = BigInteger.ONE;
			t = BigInteger.ONE;
			for (int k=1;k <= limi;++k) {
				t = t.multiply( BigInteger.valueOf( 
						(n - 2 * k + 1) * (n - 2 * k + 2) ))
						.divide(BigInteger.valueOf(k * (k + 1)));
				//System.out.println("k= " + String.valueOf(k));
				//System.out.println("t= " + String.valueOf(t));
				sum = sum.add(t);
			}
			//System.out.println("sum=" + sum);
			System.out.println(sum.mod(mod));
		}
		scanner.close();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值