给出1-n的序列插入一个bst;

给出T组询问,包含n,h分别代表点数为n,高度为h的树,求所有插入顺序的合法方案数,模1e9+7

样例输入

1

2  1

样例输出

2

#include<bits/stdc++.h>
#define LL long long
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;} const int N=;
const int mod=;
LL C[N][N],f[N][N],g[N];
int T;
int main(){
freopen("bst.in","r",stdin);
freopen("bst.out","w",stdout); int nn=,hh=;
rep(i,,nn) C[i][]=;C[][]=;
rep(i,,nn)rep(j,,i)
C[i][j]=1LL*(C[i-][j-]+C[i-][j])%mod; memset(g,,sizeof g);
memset(f,,sizeof f);
f[][]=g[]=;
rep(i,,hh){
rep(j,,nn)if(f[i][j])rep(k,,nn-j-)
f[i+][j+k+]=(f[i+][j+k+]+1LL*f[i][j]*(g[k]*+f[i][k])%mod*C[j+k][j]%mod)%mod;
rep(j,,nn) g[j]=(g[j]+f[i][j])%mod;} T=read();while(T--){
int n=read(),h=read();
printf("%lld\n",f[h+][n]);}
return ;}

我们考虑点数n+1,我们发现序列内部的顺序并没有什么卵用,而且树的形状发现有递归的情况

那么dp[i][j] 代表 高度为i点数为j 的方案数

刷表法更加好用,所以转移方程可以转化为

dp[i+1][j+k+1]+=dp[i][j]*dp[i(0-i)][k]*C[j+k][j]

我们发现两个子树中至少有一个的高度是h,剩下一个需要利用前缀和保存以平衡复杂度

那么大力枚举高度i,并更新点j由1-n,更新答案,最终将所有点在此高度下的情况前缀和更新

完结撒花

模拟赛20181016 dp的更多相关文章

  1. 模拟赛20181016 Uva 1040 状压+搜索 2005 ACM world final problem c

    题目的隐含条件将这道题指向了最小生成树: 利用类似prim的方法,枚举所有子图并判断是否包含询问点,如果包含那么可以更新答案: 边统计边更新,且由于更新一定是向更多的点状态下更新,所以一定可以统计到答 ...

  2. [10.18模拟赛] 序列 (DP)

    [10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...

  3. [8.16模拟赛] 玩具 (dp/字符串)

    题目描述 儿时的玩具总是使我们留恋,当小皮还是个孩子的时候,对玩具更是情有独钟.小皮是一个兴趣爱好相当广泛且不专一的人,这这让老皮非常地烦恼.也就是说,小皮在不同时刻所想玩的玩具总是会不同,而有心的老 ...

  4. 放棋游戏(NOIP模拟赛)(DP)

    没有原题... 囧.. [问题描述] 游戏规则是这样,有n(1<=n<=100)行格子,第一行由n个格子,第二行有n-1个格子,第三行由n-2个格子,……以此类推,第n行有1个格子.要求再 ...

  5. 98: 模拟赛-神光 dp

    $code$ #include <cstdio> #include <cstring> #include <algorithm> using namespace s ...

  6. NOIp模拟赛 现实(DP 拓扑)

    题目来源:by lzz \(Description\) 给定一张有向图,求对于哪些点,删除它和它的所有连边后,图没有环. \(n\leq 5\times10^5,m\leq 10^6\). \(Sol ...

  7. 83: 模拟赛 树形dp

    $des$ $sol$ 维护每个点的子树中的信息以及非子树的信息 $code$ #include <bits/stdc++.h> using namespace std; #define ...

  8. 7.1 NOI模拟赛 计数问题 dp

    还是可以想出来的题目 不过考场上没有想出来 要 引以为戒. 初看觉得有点不可做 10分给到了爆搜. 考虑第一个特殊情况 B排列为1~m. 容易发现A排列中前m个数字 他们之间不能产生交换 且 第k个数 ...

  9. 【noip模拟赛5】细菌 状压dp

    [noip模拟赛5]细菌   描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...

随机推荐

  1. Proverbs(谚语)

    Proverbs(谚语) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:English 1. Every man is the maste ...

  2. ubunru18.04下面安装docker

    sudo apt-get updat // 更新apt包索引 sudo apt-get remove docker docker-engine docker-ce docker.io // 卸载旧版本 ...

  3. 类 Random

    什么是Random类 此类的实例用于生成伪随机数 Random使用步骤 查看类 java.util.Random :该类需要 import导入使后使用. 查看构造方法 public Random() ...

  4. Linux系统下Mysql安装与配置

    一,使用系统 Centos7: 在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 二,下载安装 ...

  5. java集合-HashSet源码解析

    HashSet 无序集合类 实现了Set接口 内部通过HashMap实现 // HashSet public class HashSet<E> extends AbstractSet< ...

  6. 播放器授权后播放内容时出现Cnario logo水印

    问题描述 Player获取License后, 通过Messeenger发布到Player的内容前面出现Cnario 的logo水印, 如下图样式: 原因 出现这种情况一般是由于License授权不正确 ...

  7. celery 和 haystack

    celery  是分布式异步框架 haystack  是全文检索  只能在Django中用. 一.什么是celery?     ---->它是Python写的,所以只支持Python使用.但是消 ...

  8. LogHelper 日志

    public class LogHelper : Abp.Domain.Services.DomainService { public static void Debug(object message ...

  9. webpack基本用法

    1. 压缩代码(production模式) optimization: { minimizer: [new UglifyJsPlugin({ cache: true, parallel: true, ...

  10. g.DrawImage图片合成在本机可以,在服务器一直报内存不够

    g.DrawImage图片合成在本机可以,在服务器一直报内存不够,发现是这个要设为false