您的位置:首页 > 其它

HDU-3723-DeltaWave

2014-07-13 10:17 260 查看
/*这道题也是卡特兰数的一个很好的练习
<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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: