bzoj1089严格n元树——DP+高精度
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1089
f[d]为深度小于等于d的树的个数;
从根节点出发,有n个子树,乘法原理可以得到 f[d] = f[d-1] ^ n + 1 ,加1是因为也可以没有根节点;
需要高精度,直接重载运算符十分方便。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const rad=;
int n,d;
struct data{
int v[],l;
}f[];
data operator*(data a,data b)
{
data c;
for(int i=;i<=a.l+b.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];
c.l=a.l+b.l;
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]/rad;
}
else c.v[i+]+=c.v[i]/rad;
c.v[i]%=rad;
}
}
while(c.v[c.l]==&&c.l>)c.l--;
return c;
}
data operator^(data a,int n)
{
data c;
c.l=;c.v[]=;
while(n)
{
if(n&)c=c*a;
a=a*a;
n>>=;
}
return c;
}
data operator+(data a,int x)
{
a.v[]+=x;
int now=;
while(a.v[now]>=rad)a.v[now+]+=a.v[now]/rad,a.v[now]%=rad,now++;
a.l=max(a.l,now);
return a;
}
data operator-(data a,data b)
{
for(int i=;i<=a.l;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)
//{
// for(int i=a.l;i;i--)
// printf("%d",a.v[i]);
//}
void print(data a)
{
printf("%d",a.v[a.l]);
for(int i=a.l-;i;i--)
printf("%03d",a.v[i]);
printf("\n");
}
int main()
{
scanf("%d%d",&n,&d);
if(d==)
{
printf("");return ;
}
f[].l=;f[].v[]=;
for(int i=;i<=d;i++)
f[i]=(f[i-]^n)+;//+ 必须加括号!!!
print(f[d]-f[d-]);
return ;
}
bzoj1089严格n元树——DP+高精度的更多相关文章
- BZOJ1089:[SCOI2003]严格n元树(DP,高精度)
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
- 【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)
[BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...
- bzoj1089 [SCOI2003]严格n元树(dp+高精)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1899 Solved: 954[Submit][Statu ...
- BZOJ 1089 SCOI2003 严格n元树 动态规划+高精度
题目大意:定义一棵深度为d的严格n元树为根的深度为0,最深的节点深度为d,且每一个非叶节点都有恰好n个子节点的树 给定n和d,求深度为d的严格n元树一共同拥有多少种 此题的递推部分并不难 首先我们设深 ...
- P4295 [SCOI2003]严格N元树 DP
思路:DP 提交:\(5\)次 错因:2次高精写错(我太菜了),2次写错特判 题解: 设\(f[i]\)表示深度\(\leq i\)的严格\(n\)元树的数目,有 \[f[i]=pow(f[i-1], ...
- [bzoj1089]严格n元树
设f[i]表示深度不超过i的方案数,那么有f[0]=1,$f[i]=f[i-1]^{n}+1$,然后用高精度即可(注意深度恰好为d还要用f[d]-f[d-1]才是答案) 1 #include<b ...
- bzoj1089严格n元树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1089 这是一种套路:记录“深度为 i ”的话,转移需要讨论许多情况:所以可以记录成“深度&l ...
- bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1250 Solved: 621[Submit][Statu ...
- [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...
随机推荐
- [Bzoj5043][Lydsy1709月赛]密码破译(按位dp)
5043: [Lydsy1709月赛]密码破译 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 477 Solved: 125[Submit][Sta ...
- Java中的网络基础
先来一张图记录一下大概思路,之后再更新具体的代码实现.基本上来说,前半部分自己会编写一个基于socket编程的多客户端dos聊天服务器,后半部分可以实现与已有的一些服务器(比如www.google.c ...
- centos6.5编译安装gearmand Job Server(C)
1)下载安装包: wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz 2)安装编译器: yu ...
- UNIDAC不能识别CLIENTDATASET的TSINGLEFIELD
UNIDAC不能识别CLIENTDATASET的TSINGLEFIELD FIREDAC,UNIDAC这些通用的数据引擎,对某种数据库的支持,细节方面总有BUG. UNIDAC6.2.8发现不能识别C ...
- init.rc文件中面启动c++程序,通过jni调用java实现
</pre><p>注:假设是自己的myself.jar包,还要修改例如以下:</p><p>target/product/core_base.mk PRO ...
- [转】 nginx rewrite规则
http://www.cnblogs.com/cgli/archive/2011/05/16/2047920.html 最近在VPS上尝试配置安装一个网站,VPS安装了LNMP(Linux+Nginx ...
- Solidworks做镜像 导致厚度为零的几何体怎么办
如下图所示,我想把1,2,3,4架子做一个镜像,但是提示错误 貌似只能用镜像实体,并且取消勾选"合并实体"
- IP协议解读(二)
IP协议是TCP协议栈中的核心协议,也是网络编程的基础之中的一个. 我们接着在IP协议解读(一)继续学习 网络层作用 IP分片: IP数据报的长度超过帧的MTU时,将会被分片传输. 分片可能发生在发送 ...
- C#WinForm窗体监听/拦截操作动作
C#中的事件也是通过封装系统消息来实现的,如果你在WndProc函数中不处理该消息 那么,它会被交给系统来处理该消息,系统便会通过代理来实现鼠标单击的处理函数,因此你可以通过 WndProc函数来拦截 ...
- Studio 3T for MongoDB连接51.212复制集
Studio 3T for MongoDB连接51.212复制集 [ #DirectConection Authentication Mode - Basic(MONGODB-CR or SCEAM- ...