【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. frameset的各个frame之间互相访问的方法

    工作中很少使用到frameset,对其了解也是十分有限,这里在网上找了点资料,摘抄了部分内容. (1)获得html页面上的frame window.frames可以获得本页面上所有frame集合,用法 ...

  2. [2016北京集训试题15]cot-[分块]

    Description Solution 如图,假如我们知道了以任何一个点为顶点的135-180度的前缀和和90-180度的前缀和,我们就可以搞出三角形的面积. 差分.add[i][j]和dev[i] ...

  3. S5PV210 DDR2初始化 28个步骤总结

    看了一套视频,感觉DDR这个部分将的非常细致也很好,于是把视频内容花了一个多星期作了总结. 这个视频就是不知道是谁讲的,做好事不留名啊---那位知道告诉我哈-- 平台:S5PV210 DDR: 兼容 ...

  4. MFC如何为程序添加标题

    1.在CMainFrame类中找到函数PreCreateWindow,在该函数中添加 cs.style &=~FWS_ADDTOTITLE;//去掉窗口的 自动标题 属性. 这句很重要不然的话 ...

  5. libgdx学习记录8——对话框Dialog

    Dialog在游戏中也很常用,尤其在设置.退出.商店.暂停等画面.Dialog的使用也可以通过skin实现,也可以自定义. 下面是一个简单的实例: package com.fxb.newtest; i ...

  6. [CF1010E]Store[kd-tree]

    题意 有一个长方体,不知道它的位置,给出 \(n\) 个一定在长方体内的点和 \(m\) 个一定不在的点,有 \(k\) 次询问,每次询问一个点是否 在.不在.不确定 在长方体内. \(n\leq 1 ...

  7. 余玄相似度,TF-IDF

    能干什么? 文章去重,语句去重,提取关键词(文章摘要,页面指纹),图片识别,语音识别 想要做一个相似度,最重要的是什么? 必须得到一个度量:计算个体之间的相似程度(分数,0-1之间,0代表完全不同,一 ...

  8. Serverless架构详解:开发者如何专注于业务代码本身?

    本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 演讲嘉宾:黄文俊,曾负责企业级存储.企业级容器平台等产品的架构与开发,目前主要负责SCF腾讯无服务器云函数产品相关. ...

  9. LintCode——旋转字符串

    描述:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例:对于字符串 "abcdefg"     offset=0 => "abcdefg&qu ...

  10. 金蝶盘点机PDA仓库条码管理:仓库如何盘点

    1.1. 仓库盘点 传统的仓库盘点,需要人工手工抄写盘点单,时候再去电脑上一行行的录入盘点单,操作非常耗时费力,往往需要盘点好几天,最终盘点效果还不好,在抄写过程中容易出现错误,从而造成盘点结果不准确 ...