Uva 10247 (组合计数)
题目:
有一颗 K 叉完全树, 深度 D,有 N 个节点, 给你 [1 - N] 给这颗树的节点标号。
父节点 要比所有子节点的标号小。 问有多少种标号方法。
分析:
题目的标号是不允许重复的。所以根节点的表示是最小的。
对于一颗 K 叉 D 深度的树, 其节点数为 Nk,dN_{k,d}, 首先根节点的标号数是最小的。
然后就会剩下 N-1 个标号, 就相当于把 N-1个数分为 K 组, 每组 Nk,d−1N_{k,d-1}个
对于这些分配方案就有 T=∏(Nk,d−1−k∗Nk,d−1Nk,d−1);T = \prod\binom{N_{k,d}-1-k*N_{k,d-1}}{N_{k,d-1}};
每颗子树的标号方案是互不影响的, 所以有答案: Ansk,d=T∗(Ansk,d−1)kAns_{k,d} = T * (Ans_{k,d-1})^{k}
Code:
import java.math.*;
import java.util.*;public class Main {public static int[][] N = new int[25][25];public static BigInteger[][] Ans = new BigInteger[25][25];public static BigInteger C(int m, int n) {if(n > m) return BigInteger.ZERO;if(n > (m-n)) return C(m,m-n);BigInteger ans = BigInteger.ONE;//System.out.println(n);for(int i = 0; i < n; ++i) {ans = ans.multiply(BigInteger.valueOf((long)(m-i))).divide(BigInteger.valueOf((long)(i+1)));}return ans;}public static void INIT() {for(int i = 1; i < 25; ++i) {int tmp = 1;N[i][0] = 1;for(int j = 1; j < 25; ++j) {tmp = tmp * i;N[i][j] = N[i][j-1] + tmp;}}}public static void GetAns() {for(int i = 1; i < 25; ++i) {Ans[i][0] = BigInteger.ONE;for(int j = 1; i*j < 25; ++j) {Ans[i][j] = BigInteger.ONE;int n = N[i][j-1];int m = N[i][j];for(int k = 0; k < i; ++k) {Ans[i][j] = Ans[i][j].multiply(Ans[i][j-1]);if(m-1-k*n >= n) {Ans[i][j] = Ans[i][j].multiply(C(m-1-k*n, n));}//System.out.println(Ans[i][j]);}}}}public static void main(String[] args) {INIT();GetAns();Scanner cin = new Scanner(System.in);while(cin.hasNext()) {System.out.println(Ans[cin.nextInt()][cin.nextInt()]);//System.out.println(C(cin.nextInt(), cin.nextInt()));}}
}
Uva 10247 (组合计数)相关推荐
- 解题报告(五)组合计数(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- CF1237F Balanced Domino Placements(组合计数,dp)
CF1237F Balanced Domino Placements Solution 显然可以先考虑横着的骨牌,再考虑竖着的骨牌.但是思路卡在了选取横着的骨牌会对竖着的骨牌的相邻对数产生影响. 然而 ...
- 【Luogu4921】情侣?给我烧了!(组合计数)
[Luogu4921]情侣?给我烧了!(组合计数) 题面 洛谷 题解 很有意思的一道题目. 直接容斥?怎么样都要一个平方复杂度了. 既然是恰好\(k\)对,那么我们直接来做: 首先枚举\(k\)对人出 ...
- 1307 牡牛和牝牛(组合计数-递推)
1. 问题描述: 约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有 K 只牝牛.请计算 ...
- 学组合数学心得与题解(一)——组合计数
今天我在某网站上稍微学习了一下组合数学,准确来讲,今天就看了看组合计数.像一些弱智的排列数.组合数大家肯定在小学奥数就已经精通了(只有我这种蒟蒻忘的精光).当然,博主比较菜,连二项式定理.帕斯卡恒等式 ...
- 基础组合计数常用的概念和方法总结
基础组合计数常用的概念和方法总结 一.组合计数中的基本概念与性质 1.排列 定义 性质 2.组合 定义 性质 二.组合计数中的一些常用技巧 1.容斥原理 定义 公式 2.捆绑与插空法 捆绑法 插空法 ...
- 数学知识——组合计数
组合计数 文章目录 组合计数 概述 动态规划 牡牛和牝牛 思路 代码 隔板法 方程的解 思路 代码 序列统计 思路 代码 加法 & 乘法原理 加法原理 乘法原理 车的摆放 思路 代码 容斥原理 ...
- CodeForces 997C-Sky Full of Stars〖容斥定理+组合计数〗
网页链接:传送门 C. Sky Full of Stars time limit per test : 4 seconds memory limit per test : 256 megabytes ...
- 1308 方程的解(组合计数--隔板法)
1. 问题描述: 佳佳碰到了一个难题,请你来帮忙解决.对于不定方程 a1+a2+⋯+ak−1+ak=g(x),其中 k ≥ 1 且 k∈N∗,x 是正整数,g(x)=x ^ x mod 1000(即 ...
最新文章
- Java学习lesson 09
- https连接java_如何从Java应用程序设置Https连接
- Java 语法规定之外的命名注释规范
- 热泵精馏_异丙醇丙酮氢气化学热泵技术验证示范平台建成并完成调试
- python字符串字面量有哪四种定义方式_python中字符串连接的四种方式
- 《企业大数据系统构建实战:技术、架构、实施与应用》——第1章 企业大数据战略定位 1.1 宏观...
- 实现Modbus Rtu 服务端 通过RS485转4G方式 实现远程采集传输串口设备数据
- 用HTML 格式导出Excel 时,如何保留显示网格线 转载
- position:relative的用法
- 使用java做出围棋或者五子棋
- (保姆级教程)免费将pdf转化为word文档,不限页数
- html语言type,HTML中type是什么意思?
- 《匆匆那年》的你,还记得吗?数学中的那些有(hui)趣(se)的定理(10)——天下没有免费午餐定理(No Free Lunch Theorem)
- android三星定位闪退,三星手机闪退问题7种修复方法
- Mega2560串口通信实现
- Cocos2d的ChipMunk
- 人事面试100问(3)
- java8 合并两个list日期相同为一条
- 『边城』: 陌上花开,可缓缓归矣
- pickel加速caffe读图