题目: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. SPOJ BALNUM ★(位压缩状态+数位DP)

    题意 求区间[A,B]上的平衡数个数.平衡数是这样的数:在数的各个位上,奇数数字出现偶数次,偶数数字出现奇数次. 思路 很明显我们需要记录每一位出现的次数.分别记录是不明智的,而我们又只需要记录奇数次 ...

  2. Day11 - Python操作memcache、redis缓存、rabbitMQ队列

    本周课前必备: 1. Memcached 2. Python操作Memcached模块: https://pypi.python.org/pypi/python-memcached 3. Redis ...

  3. neutron源码分析(一)OpenStack环境搭建

    一.OpenStack安装 安装一个初始化的Mitaka版本的OpenStack环境用于分析,neutron源码 序号 角色 IP地址 版本 1 controller 172.16.15.161 mi ...

  4. guava学习--cache

    转载:http://outofmemory.cn/java/guava/cache/how-to-use-guava-cache   http://www.cnblogs.com/parryyang/ ...

  5. IHTMLDocument2 TO IWebBrowser2

    if(NULL != pIHTMLDocument2) { IHTMLWindow2* pIHTMLWindow2 = NULL; hr = pIHTMLDocument2->get_paren ...

  6. js jq 主动触发事件

    js的自定义事件与触发 //主动触发事件:触发鼠标被按下事件 var btn2 =document.getElementById("btn2"); var btn = docume ...

  7. 学会使用Fidder抓取app的http请求(转)

    fidder可以抓取http请求,抓取手机app上面的,自己pc的请求也可以截取,通过这样达到类似浏览器调试的效果,更容易找到问题. 使用原文链接:http://www.cnblogs.com/syf ...

  8. 关于TCP/IP协议

    TCP的特点: TCP是面向连接的传输层协议 TCP的传输是可靠传输 TCP是全双工的通信 TCP的连接是点对点的传输 TCP和UDP的区别 tcp是面向连接的,两台主机的通信之前必须通过三次握手建立 ...

  9. 【SQL查询】正则表达式匹配字符串

    1. 元字符说明 元字符 含义 ^ 匹配输入字符串的开始位置. $ 匹配输入字符串的结尾位置. * 匹配前面的字符零次或多次. + 匹配前面的字符一次或多次. ? 匹配前面的字符零次或一次. . 匹配 ...

  10. Eclipse Java EE IDE中jsp页面编码修改

    Eclipse Java EE IDE模板编码是ISO8859,肯定不是我们需要的,修改方法如下图: 依次点击:Window---->Preference---->Web---->J ...