bzoj1089严格n元树
题目: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元树的更多相关文章
- bzoj1089严格n元树——DP+高精度
		
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1089 f[d]为深度小于等于d的树的个数: 从根节点出发,有n个子树,乘法原理可以得到 f[ ...
 - [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】[SCOI2003]严格n元树(高精度,动态规划)
		
[BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...
 - [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
		
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...
 - BZOJ1089: [SCOI2003]严格n元树
		
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 762 Solved: 387[Submit][Status ...
 - 【bzoj1089】严格n元树
		
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d(根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严格 ...
 - BZOJ1089:[SCOI2003]严格n元树(DP,高精度)
		
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
 - BZOJ1089 [SCOI2003]严格n元树   【dp + 高精】
		
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
 - bzoj1089 [SCOI2003]严格n元树(dp+高精)
		
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1899 Solved: 954[Submit][Statu ...
 
随机推荐
- crontab执行定时任务
			
在linux下面使用命令crontab -e 编辑任务: [adv@localhost]$ crontab -e 之后开始编辑任务 * * * * * cd /home/adv/work/cutte ...
 - CentOS7 LVM添加硬盘及扩容
			
一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制.LVM将一个或多个磁盘分区(PV)虚拟为一个卷组(VG), ...
 - 四元数 Quaternion
			
最近在重写自己游戏引擎的场景管理模块,重温了一下有关四元数的一些知识,在此做一下简单的笔记. 四元数可以用来准确地描述三维矢量的旋转,并且可以有效地表达多个旋转操作的叠加,因此在三维游戏引擎的场景管理 ...
 - Python中面向对象的一些关于类变量与实例变量的理解
			
1. 要写出有意义的面向对象的代码,最核心的:类.对象.三大特性:继承.封装.多态 类变量与实例变量: class Student(): # 类变量 name = '张' age = 0 def __ ...
 - js jq 主动触发事件
			
js的自定义事件与触发 //主动触发事件:触发鼠标被按下事件 var btn2 =document.getElementById("btn2"); var btn = docume ...
 - kibana安装
			
kibana,ELK中的K,主要为ES提供界面化操作,据说还是比较炫的,今天安装5.5.2版本进行尝试一把. 安装过程不难,简单的配置了一下端口和IP即可,难度不大. config下的kibana.y ...
 - vue.js 源代码学习笔记  ----- 工具方法 props
			
/* @flow */ import { hasOwn, isObject, isPlainObject, capitalize, hyphenate } from 'shared/util' imp ...
 - GNU Autotools的使用方法
			
手工写Makefile是一件很有趣的事情,对于比较大型的项目,如果有工具可以代劳,自然是一件好事.在Linux系统开发环境中,GNU Autotools 无疑就充当了这个重要角色.(在Windows系 ...
 - React-Native基础_5.列表视图ListView
			
列表视图ListView 用来显示垂直滚动列表,需要指定两个东西,1 数据的来源 dataSource,2 渲染列表的条目布局 rendRow 'use strict' import React, { ...
 - 使用Sinopia搭建私有npm仓库
			
使用Sinopia搭建私有npm仓库 在用npm装包的时候,每次都要下载一大堆,慢且不说,npm还老被墙,所以就想到在公司内部搭建npm仓库镜像.大概看了几个,觉得Sinopia最简单也好用,所以就使 ...