#dp,高精度#洛谷 4295 [SCOI2003]严格N元树
题目
求有多少棵严格 \(n\) 叉树深度为 \(k\)
分析
考虑往下放子孙挺难维护的,考虑在上面换新的根。
设 \(dp[i]\) 表示深度不超过 \(i\) 的方案数,那么
\(dp[i]=dp[i-1]^n+1\)
就是新开一个根,每个子节点的选择独立,为 \(dp[i-1]^n\),再加上只有一个根节点的情况。
最后答案就是 \(dp[k]-dp[k-1]\)
代码
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1011; int ans[N],Ans[N],C[N],t[N],k,n;
void one(int *ans){
int now=1;
while (ans[now]==9) ++now;
if (now>ans[0]) ans[0]=now;
++ans[now];
for (int i=1;i<now;++i) ans[i]=0;
}
void mul(int *A,int *B){
memset(C,0,sizeof(C));
for (int i=1;i<=A[0];++i)
for (int j=1;j<=B[0];++j)
C[i+j-1]+=A[i]*B[j];
C[0]=A[0]+B[0]+1;
for (int i=1;i<C[0];++i) C[i+1]+=C[i]/10,C[i]%=10;
while (C[0]&&!C[C[0]]) --C[0];
memcpy(A,C,sizeof(C));
}
void ksm(int *ans){
memset(t,0,sizeof(t)),t[t[0]=1]=1;
for (int y=k;y;y>>=1,mul(ans,ans))
if (y&1) mul(t,ans);
memcpy(ans,t,sizeof(t));
}
void dec(int *ans){
int g=0,s;
for (int i=1;i<=ans[0];++i){
s=ans[i]-Ans[i]-g;
if (s<0) g=1,ans[i]=s+10;
else g=0,ans[i]=s;
}
while (ans[0]&&!ans[ans[0]]) --ans[0];
}
int main(){
scanf("%d%d",&k,&n);
if (!n||k==1) return !printf("1");
ans[ans[0]=1]=1;
for (int i=1;i<=n;++i){
memcpy(Ans,ans,sizeof(ans));
ksm(ans),one(ans);
}
dec(ans);
for (int i=ans[0];i;--i) putchar(ans[i]+48);
return 0;
}
#dp,高精度#洛谷 4295 [SCOI2003]严格N元树的更多相关文章
- bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1250 Solved: 621[Submit][Statu ...
- 【线型DP】洛谷P2066 机器分配
[线型DP]洛谷P2066 机器分配 标签(空格分隔): 线型DP [题目] 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配 ...
- 【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)
[BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...
- 洛谷 P3373 【模板】线段树 2
洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...
- bzoj1089 [SCOI2003]严格n元树(dp+高精)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1899 Solved: 954[Submit][Statu ...
- BZOJ 1089: [SCOI2003]严格n元树
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1591 Solved: 795[Submit][Statu ...
- BZOJ1089: [SCOI2003]严格n元树
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 762 Solved: 387[Submit][Status ...
- SCOI2003 严格N元树
SCOI2003 严格N元树 Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的 ...
- Bzoj3197/洛谷3296 [SDOI2013]刺客信条assassin(树的重心+树Hash+树形DP+KM)
题面 Bzoj 洛谷 题解 (除了代码均摘自喻队的博客,可是他退役了) 首先固定一棵树,枚举另一棵树,显然另一棵树只有与这棵树同构才有可能产生贡献 如果固定的树以重心为根,那么另一棵树最多就只有重心为 ...
- 洛谷 P2495 [SDOI2011]消耗战(虚树,dp)
题面 洛谷 题解 虚树+dp 关于虚树 了解一下 具体实现 inline void insert(int x) { if (top == 1) {s[++top] = x; return ;} int ...
随机推荐
- contextmanager装饰器
虽然上下文管理器很好用,但定义一个符合协议的管理器对象其实挺麻烦的 得首先创建一个类,然后实现好几个魔法方法.为了简化这部分工作,python 提供了一个非常好用的工具:@contextmanager ...
- django中从你的代码运行管理命令call_command
# 主要用法就是调用django自定义的Command命令 # 语法 django.core.management.call_command(name,*args,**options) - name ...
- 【Azure Redis 缓存】Redis Geo-replication(异地复制)的问题
问题描述 在Azure官网中,已列出了一系列的常规问题:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-geo-repli ...
- C++11的类型转换
//C类型转换 /* C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 显式类型转化:需要用户自己处理. 隐式类型:界定:相关类型,相近类型,意义相似的类 ...
- C++ String //string字符串查找和替换 比较 存取 修改单个字符 插入和删除 string字串
1 //string字符串查找和替换 比较 存取 修改单个字符 插入和删除 string字串 2 #include <iostream> 3 #include<string> ...
- 离线部署-docker
离线部署---docker 关键词:docker离线部署,images离线安装,docker compose,shell,minio docker离线安装 docker install offline ...
- mybatis查询大批量数据的几种方式
问题背景 公司里有很多需要跑批数据的场景,这些数据几十万到几千万不等,目前我们采用的是分页查询,但是分页查询有个深度分页问题,上百万的数据就会查询的很慢 常规解决方案 全量查询 分页查询 流式查询 游 ...
- [更新/已解决] Nodejs 16.18.0 和 Nodejs 18.16.0 两个版本同时共存 nvm-desktop
[更新/已解决] https://github.com/1111mp/nvm-desktop/blob/main/README-zh_CN.md 软件名字叫 nvm-desktop 装完 window ...
- 开发环境篇之HALCON数据结构
开发环境篇之HALCON基础 目录 基本数据分类 图标类数据 Image(图片) Pixel:像素 Channel:通道 Domain:域 图片操作 Region(区域) Region操作 XLD(轮 ...
- springboot增加slf4j
参考:https://blog.csdn.net/qq_27706119/article/details/104977666(主要) https://www.liaoxuefeng.com/wiki/ ...