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[ ...
随机推荐
- java simple check whether a file or directory.
Ref: check whether a file or directory First, make sure the path exists by using: new File(path).ex ...
- 远程推送,集成极光的SDK,证书制造
由于iOS操作系统限制,我们APP在后台不能做操作,也不能接收任何数据,所以需要用推送来接收消息. APNs服务,苹果官方网址:https://developer.apple.com/library/ ...
- C# DateTime
//c datetime 格式化DateTime dt = DateTime.Now;Label1.Text = dt.ToString();//2005-11-5 13:21:25Label2.Te ...
- node 裁剪图片
1.前端一般用Jcrop这个jq插件 要返回 x: 图片 x坐标 y: 图片 y坐标 w: 图片 宽度 h: 图片 高度 2.node 实现 var images = require("im ...
- in_array 判断问题的疑惑解决。
面试题中有一条是关于in_array判断的,题目如下: 如何大家没有深入了解in_array的类型判断过程,而是根据经验来选择,肯定很多人也是是选择了D答案的,具体的原因我也是从牛人的博客里面得到答案 ...
- grep操作
这个程序的名称来自Unix文本编辑器ed类似操作的命令: g/re/p 这个命令搜索整个文件中匹配给定正则表达式的文本行,并显示出来.有很多不同的命令行用于改变grep的默认行为,包括显示出不匹配的文 ...
- 防止mysql注入
function check($sql_str) { $checks=eregi('select|insert|update|delete|\'|\/|\\\|\*|\.|union|into|loa ...
- Magento 编译 php5.6.21 命令
./configure '--prefix=/alidata/server/php' '--enable-opcache' '--with-config-file-path=/alidata/ser ...
- mysql数据类型——浮点和定点型
mysql数据类型 字节 含义 float(m,d) 4字节 单精度浮点型,8位精度,m是十进制数字的总个数,d是小数点后面的数字个数 double(m,d) 8字 ...
- 如何用DOS 链接mysql
1.Ctrl+R 打开DOS窗口 2.键入 cd\ 回车进入C盘根目录 3.进入mysql bin目录下 操作mysql命令 4.输入连接数据库命令 mysql -hlocalhost -uroot ...