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

    今天在做一个简单的登陆功能时,当一切准备就绪,点击登陆时,什么都没发生..然后开始debug,打断点调试,然后发现了这个.向页面传递数据flag是true代表该用户的账号密码验证码等信息正确可以登录, ...

  2. Openstack OCATA 安装环境说明(一) 未完成版本

    1 Openstack简介: 2 实验说明: 3 图例: 4 实验环境说明: 4.1 ) 网卡说明: 网卡名 网 段 连接方式 说明 eth0 10.10.5.0/24 仅主机网络 内部网络自动以IP ...

  3. selenium自动化 | 借助百度AI开放平台识别验证码登录职教云

    #通过借助百度AI开放平台识别验证码登录职教云 from PIL import Image from aip import AipOcr import unittest # driver.get(zj ...

  4. 【MYSQL】MySQL5.6.37二进制安装

    最近有个项目要用到mysql 于是在mysql的论坛中找到了一个5.6.37版本的 下面介绍怎么安装和使用mysql 下载地址: https://dev.mysql.com/downloads/mys ...

  5. 【RAC】11gRAC 搭建(VMware+裸设备)

    安装环境与网络规划 安装环境 主机操作系统:windows 7虚拟机VMware12:两台Oracle Linux R6 U5 x86_64 Oracle Database software: Ora ...

  6. java锁的对象引用

    当访问共享的可变数据时,通常需要同步.一种避免使用同步的方式就是不共享数据. 如果数据仅在单线程内访问,就不需要同步,这种技术称为"线程封闭",它是实现线程安全性最简单方式之一. ...

  7. 关于JDK15的简单理解

    一.为什么要了解JDK15? 2020年9月15日,Oracle官方发布了JDK15版本,及时关注官方的更新动态,可以让我们在日常开发中更合理的选择更加优秀的工具方法,避免使用一些过时的或一些即将被删 ...

  8. h5-video,视频在微信里变形、有黑边

    如这种情况: 微信可谓是video标签的重灾区,如果你兼容了安卓的微信,那么在其他浏览器一般也没问题了除了个别(IE:你们看我干吗?). 解决方案: <video src="video ...

  9. 如果using语句中出现异常,资源会被释放掉吗?

    <CLR Via C#>第三版 P489 在using内部抛出了异常,被using的对象还是会被释放掉. Using编译时会自动生成Try Finally代码块. 同样Using只能用于实 ...

  10. HTML5与CSS3知识点总结

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star 原文链接:https://blog.csdn.net/we ...