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

题面

BZOJ

洛谷

题解

设\(f[i]\)表示深度为\(i\)的\(n\)元树个数。然后我们每次加入一个根节点,然后枚举它的子树的深度乘起来就好了。但是这样不好做,我们设\(f[i]\)表示深度至多为\(i\)的\(n\)元树个数,那么显然,\(f[i]=f[i-1]^n+1\),加一的原因是存在只有一个根节点的情况。最终的答案直接容斥一下就变成了\(f[d]-f[d-1]\)。写个高精度就好了,反正位数不多,乘法直接暴力就行。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,d;
struct BigInt
{
int s[2000],ws;
void init(){memset(s,0,sizeof(s));s[ws=1]=0;}
void output(){for(int i=ws;i;--i)printf("%d",s[i]);puts("");}
}f[20],One;
BigInt operator+(BigInt a,BigInt b)
{
int ws=max(a.ws,b.ws);
for(int i=1;i<=ws;++i)a.s[i]+=b.s[i];
for(int i=1;i<=ws;++i)a.s[i+1]+=a.s[i]/10,a.s[i]%=10;
while(a.s[ws+1])++ws,a.s[ws+1]+=a.s[ws]/10,a.s[ws]%=10;
a.ws=ws;return a;
}
BigInt operator-(BigInt a,BigInt b)
{
int ws=a.ws;
for(int i=1;i<=b.ws;++i)a.s[i]-=b.s[i];
for(int i=1;i<=ws;++i)if(a.s[i]<0)a.s[i]+=10,a.s[i+1]-=1;
while(!a.s[ws])--ws;
a.ws=ws;return a;
}
BigInt operator*(BigInt a,BigInt b)
{
BigInt ret;int ws=a.ws+b.ws;ret.init();
for(int i=1;i<=a.ws;++i)
for(int j=1;j<=b.ws;++j)
ret.s[i+j-1]+=a.s[i]*b.s[j];
for(int i=1;i<=ws;++i)ret.s[i+1]+=ret.s[i]/10,ret.s[i]%=10;
while(!ret.s[ws])--ws;
ret.ws=ws;return ret;
}
BigInt fpow(BigInt a,int b)
{
BigInt s;s.init();s.s[1]=1;
while(b){if(b&1)s=s*a;a=a*a;b>>=1;}
return s;
}
int main()
{
cin>>n>>d;f[0].init();f[0].s[1]=1;One.init();One.s[1]=1;
for(int i=1;i<=d;++i)f[i]=fpow(f[i-1],n)+One;
f[d]=f[d]-f[d-1];f[d].output();
return 0;
}

【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)的更多相关文章

  1. BZOJ1089: [SCOI2003]严格n元树

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 762  Solved: 387[Submit][Status ...

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

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

  3. [BZOJ1089][SCOI2003]严格n元树(递推+高精度)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...

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

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

  5. BZOJ1089 [SCOI2003]严格n元树 【dp + 高精】

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

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

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

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

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

  8. SCOI2003 严格N元树

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

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

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

随机推荐

  1. python下安装lxml

    首先在环境变量path中添加:C:\Python27\Scripts 然后打开cmd命令窗口,输入以下命令: easy_install virtualenv easy_install  lxml 这样 ...

  2. 使用MySQL命令行修改密码

    格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码ab12.首先在DOS下进入目录mysql\bin,然后键入以下命令    mysqladmin - ...

  3. 20155308《信息安全系统设计基础 嵌入式C语言课堂考试补博客

    20155308<信息安全系统设计基础 嵌入式C语言课堂考试补博客 知识点 置位 ?bits = bits | (1 << 7) ; /* sets bit 7 */ bits |= ...

  4. C++自学成长之路(第一篇)

    今天开始我将开启C++自学成长之路,今天是第一天,在以前就一直在网上查找关于c++的资料,想买一本好一点的,权威一点的资料书,通过努力查找,我选择了c++ primer,在网上这本书的好评如潮.更多的 ...

  5. Servlet——提交表单信息,Servlet之间的跳转

    HTML表单标签:<form></form> 属性: actoion:  提交到的地址,默认为当前页面 method:  表单提交方式 有get和post两种方式,默认为get ...

  6. 当系统扩展遇到违背OO的里氏原则(LSP)的时候怎么办 ?

    先转一篇写得很好的文章:http://www.cnblogs.com/CodeGuy/archive/2012/03/26/2418803.html ========================= ...

  7. 记一次Spring的aop代理Mybatis的DAO所遇到的问题

    由来 项目中需要实现某个订单的状态改变后然后推送给第三方的功能,由于更改状态的项目和推送的项目不是同一个项目,所以为了不改变原项目的代码,我们考虑用spring的aop来实现. 项目用的是spring ...

  8. [Latex] 所有字体embedded: Type3 PDF文档处理 / True Type转换为Type 1

    目录: [正文] Adobe Acrobat打印解决字体嵌入问题 [Appendix I] Type3转TRUE Type/Type 1 [Appendix II] TRUE Type转Type 1 ...

  9. JMeter:生成漂亮的接口/压力测试的HTML报告

    JMeter生成HTML网页报告(非gui模式操作) 我们做性能测试的时候会经常使用一些性能测试工具,比如loardrunner和jmeter,我个人比较喜欢Jmeter这个工具,jmeter之前版本 ...

  10. PHP 设计模式六大原则

    http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...