Renatus的博客

不管到了什么时候,人们最缺少的都是时间

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

代码

虽然有标程但是并不想贴

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Goseqh/article/details/55657504
想对作者说点什么? 我来说一句

运营探讨--ipv6安全浅析

2011年01月19日 952KB 下载

没有更多推荐了,返回首页

不良信息举报

Assignment 题目探讨

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭