这是一个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;
}

序列(DP)(组合数)的更多相关文章

  1. 72. Edit Distance(困难,确实挺难的,但很经典,双序列DP问题)

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

  2. [OpenJudge90][序列DP+乱搞]滑雪

    滑雪 总时间限制: 1000ms 内存限制: 65536kB [描述] Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次 ...

  3. 序列DP(输出有要求)

    DP Time Limit:10000MS     Memory Limit:165888KB     64bit IO Format:%lld & %llu Submit Status De ...

  4. noj 2033 一页书的书 [ dp + 组合数 ]

    传送门 一页书的书 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 53            测试通过 : 1 ...

  5. 【区间dp+组合数+数学期望】Expression

    https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/I [题意] 给定n个操作数和n-1个操作符,组成一个数学式子.每次可以选择两个相 ...

  6. hdoj5909 Tree Cutting(点分治+树上dp转序列dp)

    题目链接:https://vjudge.net/problem/HDU-5909 题意:给一颗树,结点带权值v[i]<m.求异或和为k的子树个数(0<=k<m). 思路: 首先点分治 ...

  7. 一类巧妙利用利用失配树的序列DP

    I.导入 求长度为\(\text{len}\)的包含给定连续子串\(\text{T}\)的 0/1 串的个数.(\(|T|<=15\)) 通常来说这种题目应该立刻联想到状压 DP 与取反集--这 ...

  8. Contest 20140708 testB dp 组合数

    testB 输入文件: testB.in  输出文件testB.out 时限3000ms 问题描述: 定义这样一个序列(a1,b1),(a2,b2),…,(ak,bk)如果这个序列是方序列的话必须满足 ...

  9. 2019 牛客暑期多校 G subsequence 1 (dp+组合数)

    题目:https://ac.nowcoder.com/acm/contest/885/G 题意:给你两个串,要求上面哪个串的子序列的值大于下面这个串的值的序列个数,不含前导零 思路:我们很容易就可以看 ...

  10. ZOJ 3791 An easy game DP+组合数

    给定两个01序列,每次操作可以任意改变其中的m个数字 0变 1  1 变 0,正好要变化k次,问有多少种变法 dp模型为dp[i][j],表示进行到第i次变化,A,B序列有j个不同的 变法总和. 循环 ...

随机推荐

  1. Apache Hive (二)Hive安装

    转自:https://www.cnblogs.com/qingyunzong/p/8708057.html Hive的下载 下载地址http://mirrors.hust.edu.cn/apache/ ...

  2. 自定义信息丰富的Android Log

    [问题背景] 最近在项目上需要用LOG来查看和定位一些信息,但是系统原生的LOG实在太乱,信息也不太多,比如调用行数,所在方法,所在类名,线程名称都没有. [初步想法] 本着开源的精神,首先去GitH ...

  3. svn: Can't connect to host

    关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法   阿里云服务器环境(PHP+Nginx+MySQL) [原因1 ...

  4. Web测试实践-任务进度-Day01

    任务安排 说明:小组全体成员都参与了会议,对该实践进行分析以及对实践任务的拆分以及进行了任务的分配. 小组成员 华同学.郭同学.覃同学.刘同学.穆同学.沈同学 阶段划分 阶段1:评测被测系统 1.对被 ...

  5. 编写高质量代码改善C#程序的157个建议——建议118:使用SecureString保存密钥等机密字符串

    建议118:使用SecureString保存密钥等机密字符串 托管代码中的字符串是一类特殊的对象,它们不可用被改变.每次使用System.String类张的方法之一时,或者使用此类型进行运算时(如赋值 ...

  6. 编写高质量代码改善C#程序的157个建议——建议117:使用SSL确保通信中的数据安全

    建议117:使用SSL确保通信中的数据安全 SSL(Secure Socket Layer)最初是由NetScape公司设计的,用于Web安全的网络协议.目前它已经广泛应用到各类网络传输通信中了.SS ...

  7. 20169202 2016-2017-2《TCP/IP协议攻击》实验总结--十一周

    APR缓存中毒(ARP cache poisoning) 实验原理 ARP缓存是ARP协议的重要组成部分.ARP协议运行的目标就是建立MAC地址和IP地址的映射,然后把这一映射关系保存在ARP缓存中, ...

  8. MySQL中如何为查询的数据添加自增序号、顺序呢?

    背景介绍 很多时候我们在使用mysql查询数据的时候都会遇到一个问题,就是查询出来了一堆数据,但是查询的数据的表并没有序号,然而部分数据库显示工具是有外带序号显示,但是这种序号不是由sql产生的,而是 ...

  9. 基于FPGA的XPT2046触摸控制器设计

    基于FPGA的XPT2046触摸控制器设计 小梅哥编写,未经许可,文章内容和所涉及代码不得用于其他商业销售的板卡 本实例所涉及代码均可通过向 xiaomeige_fpga@foxmail.com  发 ...

  10. 单例模式到Java内存模型

    先说单例模式: 经典的单例模式实现: 饿汉式: public class Singleton { private static Singleton instance = new Singleton() ...