bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
1089: [SCOI2003]严格n元树
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 1250 Solved: 621
[Submit][Status][Discuss]
Description
如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树。如果该树中最底层的节点深度为d(根的深度为0),那么我们称它为一棵深度为d的严格n元树。例如,深度为2的严格2元树有三个,如下图:

给出n, d,编程数出深度为d的n元树数目。
Input
仅包含两个整数n, d( 0 < n < = 32, 0 < = d < = 16)
Output
仅包含一个数,即深度为d的n元树的数目。
Sample Input
2 2
【样例输入2】
2 3
【样例输入3】
3 5
Sample Output
3
【样例输出2】
21
【样例输出2】
58871587162270592645034001
HINT
Source
【思路】
DP+高精度。
设f[i]表示高i的严格n元数的数目,并设S[i]表示f[i]的前缀和。一颗高i的严格n元树有一个根节点以及n个高不超过i-1的子树构成,每个子树方案为S[n-1],则有转移式:
S[i]=(S[i-1]^n)+1
1表示只有一个根的情况。
高精度照着别人的写的,重载运算符,用起来比较方便。
【代码】
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; const int maxn = +;
const int rad = ; struct Bign { int N[maxn],len; };
void print(Bign a) {
printf("%d",a.N[a.len-]);
for(int i=a.len-;i>=;i--)
printf("%03d",a.N[i]); //补全位数
putchar('\n');
}
Bign operator *(Bign A,Bign B) {
Bign C;
int lena=A.len,lenb=B.len;
for(int i=;i<lena+lenb;i++) C.N[i]=;
for(int i=;i<lena;i++)
for(int j=;j<lenb;j++)
C.N[i+j] += A.N[i]*B.N[j];
C.len=A.len+B.len;
for(int i=;i<C.len;i++)
if(C.N[i]>=rad) {
if(i==C.len-)
C.len++ , C.N[i+]=C.N[i]/rad;
else C.N[i+]+=C.N[i]/rad;
C.N[i]%=rad;
}
while(C.len && !C.N[C.len-]) C.len--;
return C;
}
Bign operator ^(Bign A,int p) { //快速幂
Bign C;
C.len=; C.N[]=;
while(p) {
if(p&) C=C*A; A=A*A; p>>=;
}
return C;
}
Bign operator +(Bign A,int x) {
A.N[]+=x;
int now=;
while(A.N[now]>=rad) {
A.len=max(A.len,now+);
A.N[now+]+=A.N[now]/rad;
A.N[now]%=rad;
now++;
A.len=max(A.len,now);
}
return A;
}
Bign operator-(Bign A,Bign B) {
for(int i=;i<A.len;i++) {
A.N[i]-=B.N[i];
if(A.N[i]<)
A.N[i]+=rad , A.N[i+]--;
}
while(A.len && !A.N[A.len-]) A.len--;
return A;
} int n,d;
Bign S[]; int main() {
scanf("%d%d",&n,&d);
if(!d) { puts(""); return ; }
S[].len=; S[].N[]=;
for(int i=;i<=d;i++)
S[i]=(S[i-]^n)+;
print(S[d]-S[d-]);
return ;
}
bzoj 1089 [SCOI2003]严格n元树(DP+高精度)的更多相关文章
- BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度
题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每一个非叶节点都有恰好n个子节点的树 给定n和d,求深度为d的严格n元树一共同拥有多少种 此题的递推部分并不难 首先我们设深 ...
- BZOJ 1089: [SCOI2003]严格n元树
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1591 Solved: 795[Submit][Statu ...
- bzoj 1089: [SCOI2003]严格n元树【dp+高精】
设f[i]为深度为i的n元树数目,s为f的前缀和 s[i]=s[i-1]^n+1,就是增加一个根,然后在下面挂n个子树,每个子树都有s[i-1]种 写个高精就行了,好久没写WA了好几次-- #incl ...
- bzoj 1089 SCOI2003严格n元树 递推
挺好想的,就是一直没调过,我也不知道哪儿的错,对拍也拍了,因为数据范围小,都快手动对拍了也不知道 哪儿错了.... 我们定义w[i]代表深度<=i的严格n元树的个数 那么最后w[d]-w[d-1 ...
- BZOJ1089:[SCOI2003]严格n元树(DP,高精度)
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
- bzoj1089 [SCOI2003]严格n元树(dp+高精)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1899 Solved: 954[Submit][Statu ...
- 【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)
[BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...
- 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)
http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...
- 【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)
题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树.问深度为d的严格n元树数目. 解法:f[i]表示深度为<=i的严格n元树数目.f[i]-f[i-1]表示深度为i的严格n元树数目.f[ ...
随机推荐
- 如何在获取Datarow对象在其所属DataTable中的Index
做项目的时候需要先select一个DataTable的子集,后来又需要子集中这些DataRow的Index, 这个需求本来就有些奇怪,网上也没搜到.刚开始走了很多弯路,后来发现一个简便方法 'dr是你 ...
- 完全卸载oracle
今天在网上看到有位网友写的篇日志,感觉蛮好的,一般卸载oracle有4个地方需求注意:1)Services,2)software,3eventlog,4)path. 1.关闭 oracle 所有的服务 ...
- 十、C# 异常处理
1.多异常类型 2.捕捉异常 3.常规catch块 4.异常处理的指导原则 5.定义自定义异常 1.多异常类型 代码要引发任何异常,只需为要引发的异常实例实例附加关键字throw作为前缀.具体选择 ...
- 安装SQLServer2008后Windows防火墙上的端口开放
1.打开SQL Server 配置管理器-->SQL Server 网络配置-->XXX的协议,启用TCP/IP协议2.打开TCP/IP协议的属性,切至“IP地址”标签,拉至最下端的IPA ...
- chdir 改变当前目录为起始目录
<?php chdir(dirname(__FILE__));//把当前目录设置为当前目录?> 将 PHP 的当前目录改为 directory. 参数 directory 新的当前目录 返 ...
- 与 空格的区别
nbsp 是 Non-Breaking SPace的缩写,即“不被折断的空格”,当两个单词使用 连接时,这两个单词就不会被分隔为2行,如下面 <div id="div1" ...
- 用jQuery实现瀑布流效果学习笔记
jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发.以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码.神奇的让我来把 ...
- Hash索引和BTree索引区别
(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询. 由于 Hash 索引比较的是进行 Hash ...
- Java包详解
背景: 在java中要求文件名和类名相同,所以如果把多个类放在一起,就可能出现文件名冲突 所以用包来解决,一个包中可以包含多个类 包是java提供的一种用于区别类的名字空间的机制,是类的组织方式,是一 ...
- apache rewrite .htaccess 站点内容重定向实例
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENA ...