这是一个DP题。

我们设\(f[i][j][k]\)表示\(i\)序列长度中放入了\(j\)个元素,其中\(k\)是限定的众数的个数;状态转移方程是

\[f[k][i][j]=f[k][i-1][j-1]+f[k][i-1][j]-f[k][i-k-1][j-1]
\]

前面的两个相加应该比较好理解,也就是我们考虑从上一个长度转移过来,新加入的那个数是原先已经加入过的元素还是没有加入过的元素。

后面减去是因为要去掉不合法的情况——如果新加入的这个数出现了k+1次那么就显然是不合法情况。(注:\(i-(i-k-1)=k+1\))

因为是多组数据,但是数据范围并不大,而且我们的答案是一步一步推出来的的,所以针对每次询问都重新算一遍不如预处理方便。那么我们就在询问前进行预处理。

之后就是开一个g数组,\(g[i]\)表示的是众数个数小于等于i的时候的个数。之后我们就可以用原先算过的sum数组来累加g的值了。

但是要注意的是,最后一维我们不确定是那些数,而我们又要计算序列种类个数+需要的是不下降的序列,所以我们可以想到是组合数。然后也是同样的,考虑进行预处理。我们预处理从n个里面选出来i个数就行了qwq,但是因为n的范围很大,但我们需要的范围只在m以内,所以预处理到m即可。

最后我们用出现次数乘上它的种类个数再除以总和就是期望了。但是注意因为我们g数组相当于是在计算前缀和(因为要算总数个数),所以最后要差分。

最后注意精度问题,我们最好使用long double。(但是因为long double占用16个字节,是int 类型的4倍啊qwq),一定要注意空间是否会炸。。。。。)

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int T,m,n;
long double C[255],sum[255][255][255],f[255][255][255],g[255]; int main(){
C[0]=true;
for(register int k=1;k<=251;++k){
sum[k][0][0]=1;
for(register int i=1;i<=251;++i){
for(register int j=1;j<=i;++j){
sum[k][i][j]=sum[k][i-1][j-1]+sum[k][i-1][j];
if(k<i) sum[k][i][j]-=sum[k][i-k-1][j-1];
}
}
}
while(cin>>m>>n){
memset(g,0,sizeof(g));
for(register int i=1;i<=m;++i)
C[i]=C[i-1]*(n-i+1)/i;
for(register int k=1;k<=m;++k)
for(register int j=1;j<=m;++j)
g[k]+=sum[k][m][j]*C[j];
long double ans=0;
for(register int k=1;k<=m;++k)
ans+=k*(g[k]-g[k-1])/g[m];
printf("%.4Lf\n",(double)ans);
}
return 0;
}

最新文章

  1. JS代码判断IE6,IE7,IE8,IE9!
  2. [VijosP1639]机密文件 题解
  3. PuTTY 信息泄露漏洞
  4. eclipse - 自动换行
  5. MFC对话框中解决回车键、ESC键退出的方法
  6. 配置HAProxy支持https协议
  7. MPSOC之7——开发流程uramdisk
  8. Linux中ls对文件进行按大小排序和按时间排序,设置ls时间格式
  9. SQL 知道字段名 全表搜索此字段属于哪个表
  10. Tools - 正版Windows7系统的下载与安装
  11. 17.基于scrapy-redis两种形式的分布式爬虫
  12. 使用Sublime Text 2 和 MinGW 搭建C开发环境
  13. dell R740在安装完Esxi6.0U3之后出现存储器警告
  14. 通过JdbcTemplate编写数据访问(二十八)
  15. Spring事务管理——回滚(rollback-for)控制
  16. [lsof]lsof查看哪些设备/文件被占用或者打开
  17. sublime text 给选中项插入编号
  18. 关于对afx_msg的解释-----来源百度百科
  19. py文件生成pyc
  20. Django And Django-Rest-Framework 异常记录

热门文章

  1. spring cloud zuul 配置(Robbin 和 熔断)
  2. Unsupported compiler &#39;com.apple.compilers.llvmgcc42&#39; selected for architecture &#39;armv7&#39; Xcode5
  3. href 和src 的区别
  4. 如何debug?(转载)
  5. Python 爬虫之 Scrapy 分布式原理以及部署
  6. 微软人工智能公开课 https://mva.microsoft.com/colleges/microsoftai#!jobf=Developer
  7. C#HTML解析利器HtmlAgilityPack
  8. OpenGL坐标变换专题
  9. [转]Python-__builtin__与__builtins__的区别与关系(超详细,经典)
  10. LWIP数据包管理