题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树。问深度为d的严格n元树数目。

解法:f[i]表示深度为<=i的严格n元树数目。f[i]-f[i-1]表示深度为i的严格n元树数目。f[i]=f[i-1]^n+1。d层的严格n元树可分解为1个根节点和n棵d-1层的严格n元树。利用乘法原理,再加上子树为空的一种情况。

P.S.同样要注意递推的思想!

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6
7 struct node
8 {
9 int l;
10 int s[210];
11 node() {l=0;memset(s,0,sizeof(s));}
12 }f[20];
13
14 int mmax(int x,int y) {return x>y?x:y;}
15 node operator+(node x,int y)
16 {
17 int t=1;
18 x.s[t]+=y;
19 while (x.s[t]>9) x.s[t+1]+=x.s[t]/10,x.s[t]%=10,t++;
20 return x;
21 }
22 node operator-(node x,node y)
23 {
24 node z;
25 z.l=mmax(x.l,y.l);
26 for (int i=1;i<=z.l;i++)
27 {
28 if (x.s[i]<y.s[i]) x.s[i]+=10,x.s[i+1]--;
29 z.s[i]+=x.s[i]-y.s[i];
30 if (z.s[i]>9) z.s[i+1]+=z.s[i]/10,z.s[i]%=10;
31 }
32 while (!z.s[z.l]) z.l--;
33 return z;
34 }
35 node operator*(node x,node y)
36 {
37 node z;
38 z.l=x.l+y.l-1;
39 for (int i=1;i<=x.l;i++)
40 for (int j=1;j<=y.l;j++)//不同于+!
41 {
42 z.s[i+j-1]+=x.s[i]*y.s[j];
43 if (z.s[i+j-1]>9) z.s[i+j]+=z.s[i+j-1]/10,z.s[i+j-1]%=10;
44 }
45 while (z.s[z.l+1]) z.l++;
46 return z;
47 }
48 node operator^(node x,int y)
49 {
50 node z=x,u=x;
51 y--;
52 while (y>0)
53 {
54 if (y%2) z=z*u;
55 u=u*u;//同底数幂相乘为指数的加法
56 y/=2;
57 }
58 return z;
59 }
60 void print(node x)
61 {
62 for (int i=x.l;i>=1;i--)//converse!!
63 printf("%d",x.s[i]);
64 printf("\n");
65 }
66 int main()
67 {
68 int n,d;
69 scanf("%d%d",&n,&d);
70 f[0].l=1,f[0].s[1]=1;
71 f[1].l=1,f[1].s[1]=2;
72 for (int i=2;i<=d;i++)
73 f[i]=(f[i-1]^n)+1;
74 print(f[d]-f[d-1]);//
75 return 0;
76 }

【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)的更多相关文章

  1. 【noi 2.6_9290】&【poj 2680】Computer Transformation(DP+高精度+重载运算符)

    题意:给一个初始值1,每步操作将1替换为01,将0替换为10.问N步操作后有多少对连续的0. 解法:f[i]表示第i步后的答案.可以直接打表发现规律--奇数步后,f[i]=f[i-1]*2-1;偶数步 ...

  2. [BZOJ]1089 严格n元树(SCOI2003)

    十几年前的题啊……果然还处于高精度遍地走的年代.不过通过这道题,小C想mark一下n叉树计数的做法. Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该 ...

  3. BZOJ1089:[SCOI2003]严格n元树(DP,高精度)

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...

  4. bzoj1089严格n元树——DP+高精度

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1089 f[d]为深度小于等于d的树的个数: 从根节点出发,有n个子树,乘法原理可以得到 f[ ...

  5. BZOJ 1089 严格n元树 (递推+高精度)

    题解:用a[i]表<=i时有几种树满足度数要求,那么这样就可以递归了,a[i]=a[i-1]^n+1.n个节点每个有a[i-1]种情况,那么将其相乘,最后加上1,因为深度为0也算一种.那么答案就 ...

  6. 【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)

    [BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...

  7. BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度

    题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每一个非叶节点都有恰好n个子节点的树 给定n和d,求深度为d的严格n元树一共同拥有多少种 此题的递推部分并不难 首先我们设深 ...

  8. bzoj1089 [SCOI2003]严格n元树(dp+高精)

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1899  Solved: 954[Submit][Statu ...

  9. BZOJ 3572 [HNOI2014]世界树 (虚树+DP)

    题面:BZOJ传送门 洛谷传送门 题目大意:略 细节贼多的虚树$DP$ 先考虑只有一次询问的情况 一个节点$x$可能被它子树内的一个到x距离最小的特殊点管辖,还可能被管辖fa[x]的特殊点管辖 跑两次 ...

随机推荐

  1. Maven 中 install,package,deploy命令区别

    mvn clean package依次执行了clean.resources.compile.testResources.testCompile.test.jar(打包)等7个命令. mvn clean ...

  2. Python3爬取小说并保存到文件

    问题 python课上,老师给同学们布置了一个问题,因为这节课上学的是正则表达式,所以要求利用python爬取小说网的任意小说并保存到文件. 我选的网站的URL是'https://www.biquka ...

  3. 无限重置IDE过期时间插件 亲测可以使用

    相信破解过IDEA的小伙伴,都知道jetbrains-agent这个工具,没错,就是那个直接拖入到开发工具界面,一键搞定,so easy的破解工具!这个工具目前已经停止更新了,尽管还有很多小伙伴在使用 ...

  4. JAVA之路_假克隆、浅克隆、深克隆

    一.JAVA假克隆 Java中,对于基本类型,可以用"="进行克隆,而对于引用类型却不能简单的使用"="进行克隆,这与JAVA的内存使用空间有关,JAVA在栈中 ...

  5. postgresql-12编译安装

    1 准备环境 修改yum源 mkdir -p /etc/yum.bak mv /etc/yum.repos.d/* /etc/yum.bak/ &&\ curl -o /etc/yum ...

  6. Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法

    Ubuntu18.04版本下,如果直接输入: sudo apt install mysql-server 命令,会默认安装mysql5.7版本,安装过程并没有提示输入密码,安装完成后也无法正常登录,这 ...

  7. pymysql模块使用介绍

    pymysql ​ 我们要学的pymysql就是用来在python程序中如何操作mysql,本质上就是一个套接字客户端,只不过这个套接字客户端是在python程序中用的,既然是客户端套接字,应该怎么用 ...

  8. Ubuntu14.04系统安装

    1. 使用U盘或光盘进行引导进入系统安装向导. 2. 安装类型选择,选择中文(简体).然后点安装ubuntu. 3. 安装ubuntu电脑必须接入外网(外网的方式有自动获取或手动编辑IP地址). 网络 ...

  9. LIS的优化

    二分优化 在求一个最长不上升自序列中,显然其结尾元素越小,越有利于接其他元素,对答案的贡献也就可能会更高 那么我们可以用low[i]去存长度为i的LIS结尾元素的最小值 因此我们只要维护low数组 对 ...

  10. Smarty 3.1.34 反序列化POP链(任意文件删除)

    Smarty <= 3.1.34,存在任意文件删除的POP链. Exp: <?php class Smarty_Internal_Template { public $smarty = n ...