3984: 玩具(toy)

3984: 玩具(toy)

题目描述

 

这个故事发生在很久以前,在 IcePrincess_1968  IcePrince_1968 都还在上幼儿园的时候。

IcePrince_1968 最近迷上了一种玩具,这种玩具中有两种零件:圆球和棍子。棍子的两头可以插在两个圆球上的各一个空洞中,从而将两个圆球连接起来。为了保证玩具的娱乐性,任意一个圆球上的空洞个数总是多于玩具套装中的棍子数。你可以认为圆球是没有体积的,所有棍子的长度均为 1

IcePrince_1968 喜欢这样玩这种玩具:他先摸出玩具袋里的一个圆球放在地上,然后重复下面的操作 n-1 次:每次从袋中取出一个圆球和一根棍子,然后等概率的从地上的圆球中选择一个,将该圆球和选择的圆球用棍子连起来,使得新的圆球在选中圆球的正上方。

IcePrince_1968 对自己搭出的艺术品很满意,便决定把这个物品送给 IcePrincess_1968 作为生日礼物。然而生日礼物是需要包装的,因为默认圆球没有体积,所以 IcePrince_1968 不用考虑包装盒的长和宽,但是包装盒的高是需要确定的,这里我们假设 IcePrince_1968 是一个非常节俭的孩子,所以包装盒的高总是等于艺术品的高度。IcePrince_1968 想知道自己需要的包装盒的高的期望对质数 p 取模后的值,但他还在上幼儿园,怎么会算呢,于是就请你来帮助他。

 

输入

 

输入数据仅一行,包含两个正整数 n,p,表示最终的艺术品中圆球的个数和模数 p

 

输出

 

输入文件仅一行,一个正整数,表示包装盒的高的期望对质数 p 取模后的值。

 

样例输入

3 998244353

样例输出

499122178

提示

 

【输入输出样例 1 解释】

三个圆球组成的艺术品,高度只可能是 1 或者 2,所以高度的期望是 1.5,在模 998244353下的期望是 499122178

【输入输出样例 2

见选手目录下的 toy/toy2.in  toy/toy2.ans

【数据规模与约定】

对于 30%的数据,满足 n<=10,p<=1,000,007

对于 50%的数据,满足 n<=20

对于 70%的数据,满足 n<=50

对于 100%的数据,满足 n<=200,p<=1,000,000,007,p 是质数。

 

 

来源

noip2018模拟-南外


神题,完全不知道怎么想

考场只会dfs枚举树的形态

O(n!) 30分

算法三

考虑非指数级的dp。令dp[i][j]表示有i个点按照题目中的方法生成的深度为j的树有多少棵,转移用树上背包,要注意子树的深度是可以小于j-1的,但至少要有一棵子树的深度是j-1,所以背包的还要加一个01状态

 似乎可以想

算法四

预处理dp[i][j]表示i个点的森林,有j个点在第一棵树的概率,转移考虑第i个点是否在第一棵子树中,我们有状态转移方程

考虑修改算法三中状态的含义,令f[i][j]表示有i个点的树,深度不超过j的概率,g[i][j]表示有i个点的森林,深度不超过j的概率,f[i][j]直接从g[i-1][j-1]转移来;g[i][j]考虑枚举第一棵树的大小k,从一棵树和一个森林转移来,同时还要乘上第一棵子树大小为k的概率,我们有状态转移方程:

具体的细节可以见标程。最后只要f[n][j]-f[n][j-1]就可以得到深度为j的树的概率。

时间复杂度:O(n^3)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值