题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1089

这是一种套路:记录“深度为 i ”的话,转移需要讨论许多情况;所以可以记录成“深度<=i”!!!

  (这种前缀和的样子得到答案也很方便,就是 f [ d ] - f [ d -1 ]。)

这样的话把根节点拿出来,剩下的就是n个深度为 i - 1 的子树了。

当然,每个深度的情况里要包含“什么节点也没有”的情况,才能正确转移。所以要+1。

1.重载运算符好方便!  2.输出的时候要注意不能吞0!学了一招。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int rad=;
int n,d;
struct data{
int v[],l;
}f[];
data operator*(data a,data b)
{
data c;c.l=a.l+b.l;
for(int i=;i<=c.l;i++)c.v[i]=;
for(int i=;i<=a.l;i++)
for(int j=;j<=b.l;j++)
c.v[i+j-]+=a.v[i]*b.v[j];//+=
for(int i=;i<=c.l;i++)
if(c.v[i]>=rad)
{
if(i==c.l)c.l++,c.v[c.l]=;
c.v[i+]+=c.v[i]/rad;
c.v[i]%=rad;
}
while(!c.v[c.l]&&c.l>)c.l--;//c.l>1
return c;
}
data operator^(data a,int b)
{
data c;
c.v[]=;c.l=;
while(b)
{
if(b&)c=c*a;
a=a*a;b>>=;
}
return c;
}
data operator+(data a,int b)
{
a.v[]+=b;int k=;
while(a.v[k]>=rad)a.v[k+]+=a.v[k]/rad,a.v[k]%=rad,k++;
a.l=max(a.l,k);
return a;
}
data operator-(data a,data b)
{
for(int i=a.l;i;i--)
{
a.v[i]-=b.v[i];
if(a.v[i]<)a.v[i]+=rad,a.v[i+]--;
}
while(!a.v[a.l]&&a.l>)a.l--;
return a;
}
void print(data a)
{
printf("%d",a.v[a.l]);
for(int i=a.l-;i;i--)printf("%03d",a.v[i]);
}
int main()
{
scanf("%d%d",&n,&d);
if(!d){printf("");return ;}
f[]=f[]+;
for(int i=;i<=d;i++)
f[i]=(f[i-]^n)+;
print(f[d]-f[d-]);
return ;
}

bzoj1089严格n元树的更多相关文章

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

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

  2. [bzoj1089]严格n元树

    设f[i]表示深度不超过i的方案数,那么有f[0]=1,$f[i]=f[i-1]^{n}+1$,然后用高精度即可(注意深度恰好为d还要用f[d]-f[d-1]才是答案) 1 #include<b ...

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

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

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

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

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

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

  6. 【bzoj1089】严格n元树

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

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

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

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

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

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

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

随机推荐

  1. 已经安装了node和npm,输入node -v 未找到命令

    昨天虚拟机上安装了nvm.node.npm,今天打开输入node -v,就显示未找到命令 输入nvm --version 发现还是有nvm版本的,不然都要以为刚配好的虚拟机又要重新安装... 再输入 ...

  2. FlashFXP 4.3.1 注册码

    FlashFXP 4.3.1 注册码 --------start--------- FLASHFXPwQAOlhkgwQAAAAC6W5MNJwTnsl73nIraAU149tnCQS0hmZU3GG ...

  3. vue请求本地json数据

    1.下载vue-resource插件 cnpm install vue-resource 1.2全局引入vue-resource: 在main.js import VueResource from ' ...

  4. poj3686

    题解: KM算法 把每一个点拆成n个 然后改变编圈 代码: #include<cstdio> #include<cmath> #include<cstring> # ...

  5. LeetCode OJ:Isomorphic Strings(同构字符串)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  6. 【LeetCode 100_二叉树_遍历】Same Tree

    解法一:递归 bool isSameTree(TreeNode* p, TreeNode* q) { if (p == NULL && q == NULL) return true; ...

  7. flask中过滤器的使用

    过滤器 过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器. 使用方 ...

  8. 2018-2019-2 网络对抗技术 20165210 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165210 Exp3 免杀原理与实践 免杀的概述 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-Ant ...

  9. Java API访问ZK的权限控制

    无权限访问结点 /** * 对于ZK的授权访问 * Created by liuhuichao on 2017/7/27. */ public class AutoSample { private s ...

  10. 密钥库文件格式[keystore]代码

    密钥库文件格式[keystore]代码 格式    :     JKS 扩展名  :      .jks/.ks 描述    :     [Java Keystore]密钥库的Java实现版本,pro ...