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[ ...
随机推荐
- 查询可用的Nuget服务地址
解决访问Nuget源失败问题 查询IP址址 nslookup nuget.org 如失败,通过google 的dns服务器查询 nslookup nuget.org 8.8.8.8 将得到的Ip地址加 ...
- Ubuntu Server 14.04 下root无法ssh登陆
今天安装了Ubuntu Server 14.04 在终端配置了root密码后,使用SecureCRT和putty竟然不能ssh登陆,SecureCRT一直提示密码不对,但是可以肯定输入的密码100 ...
- TOM大师脚本-show space 多个版本,谢谢大牛们
示例一 该脚本需区分 对象的管理方式是 自动还是 手动, 对手动管理方式 的表显示很全面 SQL> exec show_space_old('MAN_TAB','DEV','TABLE'); F ...
- 十六、C# 常用集合类及构建自定义集合(使用迭代器)
常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollectio ...
- JavaScript中style.left与offsetLeft的区别
今天在制作焦点轮播图的时候,遇到一个问题,在使用style.left获取图片的位置时,怎么也获取不到.换用offsetLeft就能够成功获取到了.虽然实现了我想要的效果,但是还是不甘心啊,没有找到原因 ...
- 打开自定义链接新窗口(safari JS prompt的坑!)2016.03.08
很简单的一个小练习,但做的过程中发现safari的一个坑,使用prompt()方法的时候,点击取消和不输入一样,会返回空字符' ',而不是null! 要求: 制作新按钮,"新窗口打开网站&q ...
- 网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室
1.简单的聊天室(控制台): 功能实现: 客户端和服务端的信息交流: 2.牵扯到的知识点: 这个我大概说一下,详细后面见代码! 1) 网络通讯的三要素 1. IP 2. 端口号. 3. 协议 2) ...
- Codeforces 551C GukiZ hates Boxes(二分)
Problem C. GukiZ hates Boxes Solution: 假设最后一个非零的位置为K,所有位置上的和为S 那么答案的范围在[K+1,K+S]. 二分这个答案ans,然后对每个人尽量 ...
- Visual Studio 2013环境下操作vc6/vc7/vc8等低版本平台项目【编译|生成|调试】
现代化的开发环境,微软一直在推出更新换代,我们所处的技术环境在日新月异的变化:不过在中国多数人们一边疲惫的追赶着时代的步伐,一边坚守着自己所获悉所掌握的那些紧吧吧的知本.对技术工具的掌握并非他们所想要 ...
- Linq查询IEnumerable与IQueryable
class Program { static void Main(string[] args) { System.Diagnostics.Stopwatch stp = new Stopwatch() ...