Assignment 题目探讨

Assignment 题目探讨


题目概况

嗯。。。首先这是一道题,题目大概的意思是每次输入两个整数m,n有一个元素个数为m的一个不下降序列,它其中的元素大小均在 [1,n] 之间且为整数。每个这样的序列都有相等的概率被取到,问这个序列中众数的出现次数的期望是多少。这里的众数出现次数指的是一个序列中出现最多的一个数字(如果有多个数字出现次数最多,那么任取其一)出现的个数

举个栗子,一个不下降序列:
1 2 3 3 3 4 4 5 5 7 7 7 8

它里面的众数的出现次数即为3,这是因为3和7出现次数最多,这个次数为3

数据范围

有至多15组数据,且 1<=m<=250 , 1<=n<=1109

解法

本题实际并不复杂,正常人的第一想法就是使用DP,这一点我们可以通过观察 m,n 的各自的大小得出。而这个想法也是正确的。我们考虑 f(pos,k) ,它表示我们目前考虑到了第 pos 个元素,它目前在第 k 段中,这种情况下的分段的方案数。下面考虑递推式:

考虑递推式,我们每次搞到一个新位置,它可以与上一个元素的段相同,也可以与上一个元素的段不同,所以我们很容易先想到这样的式子:

f(pos,k)=f(pos1,k)+f(pos1,k1)

由于本题让我们求出一个期望值,这时候我们就不能直接使用这个式子,因为这个式子它不能反映出众数的出现次数。所以我们再考虑 P(l) ,它表示众数出现次数为 l 时的概率。然后对每个P(l)分别求解,再搞一搞本题就完成啦O(∩_∩)O~

然而。。。这种情况下的递推式该怎么写呢?我们要做的肯定是去排除不符合条件的情况,即数字出现次数超过了 l 的情况

那么,就会有如下两种递推式。本题的重点就是,究竟哪一种是正确的呢:

A:f(pos,k)=f(pos1,k)+f(pos1,k1)f(posl,k)

B:f(pos,k)=f(pos1,k)+f(pos1,k1)f(pos1l,k1)

(其实就我个人而言我觉得它们都是错误的。。。。)

还有就是DP边界值的问题,究竟是应该定义 f(0,0)=1 呢还是应该定义 f(1,1)=1 呢还是什么别的。。。

也(yi)许(ding)是我太弱了QAQ,在这些问题上纠结了好久(其实现在想得也不是很明白),终于从整个递推式的推导过程感觉参考题解得出来了一个结论。为了防止本蒟蒻误导各位同学,我不在这里阐述结论。如果各位神犇有兴趣的话可以下方评论,共同交流探讨

代码

虽然有标程但是并不想贴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值