HDU 3723 Delta Wave(卡特兰数+大数)
发布时间:2020-12-14 03:13:40 所属栏目:大数据 来源:网络整理
导读:题意:从坐标(0, 0)到(n, 0)的折线,这条折线每向右延伸一个单位长度,高度要么不变,要么+1,要么-1,(不能到y=0以下)已知n,求这种折线种数 思路:我们知道上升和下降的次数要一样,而这就像卡特兰数的入栈出栈次序一样,所以我们从n中选出2k次进
题意:从坐标(0, 0)到(n, 0)的折线,这条折线每向右延伸一个单位长度,高度要么不变,要么+1,要么-1,(不能到y=0以下)已知n,求这种折线种数 思路:我们知道上升和下降的次数要一样,而这就像卡特兰数的入栈出栈次序一样,所以我们从n中选出2k次进行类出栈模拟,
那么ans[k] = C[n][2k]*C[2k][k]/(k+1),计算组合数n^2会T,然后我们可以相除ans[k-1] = C[n][2k-2]*C[2k-2][k-1]/(k)
两式递推出结果是ans[k] = ans[k-1]*(n-2*k+2)*(n-2*k+1)/(k*(k+1)) import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n; while(sc.hasNext()) { n = sc.nextInt(); BigInteger ans = BigInteger.ONE; BigInteger tmp = BigInteger.ONE; for(int i = 1; i <= n/2; i++) { tmp = tmp.multiply(BigInteger.valueOf((n-2*i+1)*(n-2*i+2))).divide(BigInteger.valueOf(i*(i+1))); ans = ans.add(tmp); } System.out.println(ans.mod(BigInteger.TEN.pow(100))); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |