题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每一个非叶节点都有恰好n个子节点的树

给定n和d,求深度为d的严格n元树一共同拥有多少种

此题的递推部分并不难 首先我们设深度为i的严格n元树一共同拥有f[i]种 令S[i]为f[i]的前缀和

我们不难发现一棵深度为i下面的严格n元树由两部分组成:一个根节点,n棵子树。当中每棵子树的深度不超过i-1

每棵子树有S[i-1]种 一共n棵子树 于是S[i]=S[i-1]^n

嗯?是不是少了点东西?没错,另一种情况,这棵严格n元树本身就是一个根节点

于是S[i]=S[i-1]^n+1

然后看看例子。。

。妈蛋。

。。高精度。。。

事实上高精度不难写真的。。。

我的高精度就是一通操作符重载。。

。 连cout都重载了。。。。

顺便学到了非常多东西

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<iomanip>
  6. using namespace std;
  7. struct long_int{
  8. int num[300],cnt;
  9. void operator = (int y)
  10. {
  11. num[1]=y;
  12. cnt=1;
  13. }
  14. int& operator [] (int x)
  15. {
  16. return num[x];
  17. }
  18. }S[20];
  19. void operator *= (long_int &x,long_int &y)
  20. {
  21. long_int z=S[19];
  22. int i,j;
  23. for(i=1;i<=x.cnt;i++)
  24. for(j=1;j<=y.cnt;j++)
  25. {
  26. z[i+j-1]+=x[i]*y[j];
  27. z[i+j]+=z[i+j-1]/10000;
  28. z[i+j-1]%=10000;
  29. }
  30. z.cnt=x.cnt+y.cnt;
  31. if(!z[z.cnt])
  32. --z.cnt;
  33. x=z;
  34. }
  35. void operator ++ (long_int &x)
  36. {
  37. int i=1;x[1]++;
  38. while(x[i]==10000)
  39. x[i]=0,x[++i]++;
  40. }
  41. long_int operator - (long_int &x,long_int &y)
  42. {
  43. long_int z=S[19];
  44. int i;
  45. for(i=1;i<=x.cnt;i++)
  46. {
  47. z[i]+=x[i]-y[i];
  48. if(z[i]<0)
  49. z[i]+=10000,z[i+1]--;
  50. if(z[i])
  51. z.cnt=i;
  52. }
  53. return z;
  54. }
  55. long_int operator ^ (long_int x,int y)
  56. {
  57. long_int z=S[19];z=1;
  58. while(y)
  59. {
  60. if(y&1) z*=x;
  61. x*=x;
  62. y>>=1;
  63. }
  64. return z;
  65. }
  66. ostream& operator << (ostream& os,long_int x)
  67. {
  68. int i;
  69. os<<x[x.cnt];
  70. for(i=x.cnt-1;i;i--)
  71. os<<setfill('0')<<setw(4)<<x[i];
  72. return os;
  73. }
  74. int n,d;
  75. int main()
  76. {
  77. int i;
  78. cin>>n>>d;
  79. if(!d)
  80. {
  81. puts("1");
  82. return 0;
  83. }
  84. S[0]=1;
  85. for(i=1;i<=d;i++)
  86. S[i]=S[i-1]^n,++S[i];
  87. cout<<S[d]-S[d-1]<<endl;
  88. }

BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度的更多相关文章

  1. BZOJ 1089: [SCOI2003]严格n元树

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

  2. bzoj 1089 [SCOI2003]严格n元树(DP+高精度)

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

  3. bzoj 1089 SCOI2003严格n元树 递推

    挺好想的,就是一直没调过,我也不知道哪儿的错,对拍也拍了,因为数据范围小,都快手动对拍了也不知道 哪儿错了.... 我们定义w[i]代表深度<=i的严格n元树的个数 那么最后w[d]-w[d-1 ...

  4. bzoj 1089: [SCOI2003]严格n元树【dp+高精】

    设f[i]为深度为i的n元树数目,s为f的前缀和 s[i]=s[i-1]^n+1,就是增加一个根,然后在下面挂n个子树,每个子树都有s[i-1]种 写个高精就行了,好久没写WA了好几次-- #incl ...

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

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

  6. 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...

  7. 【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)

    题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树.问深度为d的严格n元树数目. 解法:f[i]表示深度为<=i的严格n元树数目.f[i]-f[i-1]表示深度为i的严格n元树数目.f[ ...

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

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

  9. 1089: [SCOI2003]严格n元树

    好久没更新了..于是节操掉尽python水过本来就水的题.. n,d=map(int, raw_input().split()) if d==0: print 1 else: f=[1] for i ...

随机推荐

  1. 字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)

    .中断方式获取按键值 单片机: )按键按下 )cup发生中断,跳转到异常向量入口执行 )b 函数 a.保存被中断的现场 b.执行中断处理函数 c.恢复 linux: )trap_init()函数构造异 ...

  2. ssm项目开发通用base模块和工具

    controller层日期转换通用类 package cn.itcast.jk.controller; import java.text.DateFormat; import java.text.Si ...

  3. C#处理文本文件TXT实例详解(转)

    作者:安静平和 字体:[增加 减小] 类型:转载 时间:2015-02-02我要评论 这篇文章主要介绍了C#处理文本文件TXT的方法,以实例形式详细分析了txt文本文件的读取.修改及打印等功能的实现技 ...

  4. hdu 5215 Cycle

    题意:找到一个图中是否含有奇环和偶环 题解: 1.用了两种发法.一个就是跟bc给的答案一样,先求弱联通分量.再在环中找奇偶环 2.我想到的一个略微省些代码量的方法.边求联通分量,边推断是否含有奇环偶环 ...

  5. 【Unity/Kinect】Kinect实现UI控件的点击

    用体感来实现UI控件的点击,如点击按钮. 做法:用一个图片表示左手手掌,图片位置追踪左手手掌移动,当手掌位于UI控件的矩形内时,握拳表示点击该控件. using UnityEngine; using ...

  6. 启动haoop并运行wordcount

    启动hadoop,这里hadoop的版本是2.7.4 进入Hadoop的安装目录的bin目录下,采用-format命令格式化文件系统. hadoop namenode -format hadoop d ...

  7. [状态机]嵌入式设计模式:有限状态自动机的C语言实现

    转自:http://www.cnblogs.com/autosar/archive/2012/06/22/2558604.html 状态机模式是一种行为模式,在<设计模式>这本书中对其有详 ...

  8. SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换

    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换 本文转载至:http://exceptioneye.iteye.com/blog/1698064 Spri ...

  9. CentOS6.5下安装Cloudstack

    个人记录: 使用yum源安装,地址:http://mirrors.163.com/.help/CentOS6-Base-163.repo 后续待进行

  10. Windows下进程通信方式

    当线程分属于不同进程,也就是分驻在不同的地址空间时,它们之间的通讯需要跨越地址空间的边界,便得采取一些与同一进程中不同线程间通讯不同的方法.在Windows程序中,各个进程之间常常需要交换数据,进行数 ...