cdqz2017-test10-柚的策略(期望DP & 组合数学)

根据期望的可加性,我们可以算出每一位客人的期望等待时间,将他们累加
即 每一位客人所有可能情况的时间之和 / n!
设S= 每一位客人所有可能情况的时间之和
如果有f(i,p)种方案使客人i是恰好第p个进入花亭的,那对S的贡献为(n-p+1)* t[i] * f(i,p)
所以问题转变为计算f(i,p),客人i是恰好第p个进入花亭的方案数
这个恰好很难算
所以转化为在前p个进入花亭的客人中有i,最后f(i,p)减f(i,p-1)就得到了恰好是第p个
若前k+p-1个客人中至少有k-1个客人的用时比第i个客人的用时多,那么客人i可以在前p个进入花亭
所以问题又转化为了计算dp(i,j,l),在i个客人里至少有j个客人的用时比第l个客人用时多,且第i个客人一定在这i个客人里的方案数
换个状态定义会更好算:
用时相同的客人谁先进谁后进对答案没有影响
将客人的用时映射到1——n
dp(i,j,l),在1——n里选i个数至少有j个数比l大 且 不能选l的方案数
可以得到方程:(把f换成dp)

有了dp(i,j,l),再来算f(i,p)
前面说了若前k+p-1个客人中至少有k-1个客人的用时比第i个客人的用时多,那么客人i可以在前p个进入花亭
假设t[i]映射到了c
所以f(i,p)= dp[k+p-1-1][k-1][c]*(k+p-1)*(n-(k+p-1))!
因为客人i要占据一个位置,这个位置有(k+p-1)种选择,
在客人i之后的客人可以随意组合,所以是全排列
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 301
#define M 1000001 const int mod=1e9+; int t[N];
int v[M],rk[N]; int C[N][N];
int fac[N]; int dp[N][N][N];
int f[N][N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int Pow(int a,int b)
{
int res=;
for(;b;a=1LL*a*a%mod,b>>=)
if(b&) res=1LL*a*res%mod;
return res;
} int main()
{
freopen("strategy.in","r",stdin);
freopen("strategy.out","w",stdout);
int n,k;
read(n); read(k);
for(int i=;i<=n;++i) read(t[i]),v[t[i]]++;
for(int i=;i<M;++i) v[i]+=v[i-];
for(int i=;i<=n;++i) rk[i]=v[t[i]]--;
C[][]=;
fac[]=;
for(int i=;i<=n;++i)
{
C[i][]=;
fac[i]=1LL*fac[i-]*i%mod;
for(int j=;j<=i;++j) C[i][j]=(C[i-][j-]+C[i-][j])%mod;
}
for(int i=;i<=n;++i)
{
for(int j=;j<=i;++j)
for(int l=;l<=n;++l)
dp[i][j][l]=1LL*C[n-l][j]*C[l-][i-j]%mod*fac[i]%mod;
//选i个数恰好有j个数比l大的方案数
for(int j=i;j>=;--j)
for(int l=;l<=n;++l)
{
dp[i][j][l]+=dp[i][j+][l];
dp[i][j][l]-=dp[i][j][l]>=mod ? mod : ;
}
//选i个数至少有j个数比l大的方案数
}
int c,m,h;
int ans=;
for(int i=;i<=n;++i)
{
c=rk[i];
for(int j=;j<=n;++j) // 第i个人是前j个进入花亭的
{
m=min(k+j-,n);
h=k--max(,k+j--n);
f[i][j]=1LL*dp[m-][h][c]*m%mod*fac[n-m]%mod;
}
for(int j=n;j;--j)
{
f[i][j]-=f[i][j-];
if(f[i][j]<) f[i][j]+=mod;
ans=(ans+1LL*f[i][j]*(n-j+)%mod*t[i]%mod)%mod;
// printf("%d\n",ans);
}
}
ans=1LL*ans*Pow(fac[n],mod-)%mod;
printf("%d",ans);
}
cdqz2017-test10-柚的策略(期望DP & 组合数学)的更多相关文章
- [CSP-S模拟测试]:chemistry(期望DP+组合数学)
题目传送门(内部题27) 输入格式 第一行有$4$个整数$n,k,p,q$.第二行有$n$个整数$a_i$.接下来有$n-1$行,每行有两个整数$u,v$,表示$u$与$v$之间通过化学单键连接. 输 ...
- 概率期望dp
对于概率dp,我一直都弄得不是特别明白,虽然以前也有为了考试去突击过,但是终究还是掌握得不是很好,所以决定再去学习一遍,把重要的东西记录下来. 1.hdu4405 Description 在一个 \( ...
- 2018.08.30 花园(期望dp)
题目背景 SCOI2017 DAY2 T1 题目描述 小 A 的花园的长和宽分别是 L,H .小 A 喜欢在花园里做游戏.每次做游戏的时候,他都先把花园均匀分割成 L×H 个小方块,每个方块的长和宽都 ...
- 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra
题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- 【BZOJ4872】[Shoi2017]分手是祝愿 数学+期望DP
[BZOJ4872][Shoi2017]分手是祝愿 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n ...
- 【bzoj4872】[Shoi2017]分手是祝愿 数论+期望dp
题目描述 Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为从 ...
- P3750 [六省联考2017]分手是祝愿 期望DP
\(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...
- BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】
题目 Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 ...
随机推荐
- [转帖]Nginx 的 TCP 负载均衡介绍
Nginx 的 TCP 负载均衡介绍 https://www.cnblogs.com/felixzh/ 前几天同事问 nginx的代理 当时以为只有http的 现在看起来还有tcp的可以使用tcp 代 ...
- SQLSERVER备份恢复后权限问题简单处理.
1. 同事的服务器出现无法访问表, 应用连不上数据库... 远程了下 发现. 使用业务用户登录数据库之后查询无法下拉帮助到表, 必须增加schemas才可以访问到具体的表. 2. 问题解决. 1. 修 ...
- vim鼠标模式打开与关闭
开启鼠标模式 :set mouse=x, x取值如下, 例如:set mouse=a, 开启所有模式的mouse支持 n 普通模式 v 可视模式 i 插入模式 c 命令行模式 ...
- spring学习总结(一)_Ioc基础(下)
本篇文章继续上篇文章讲解Ioc基础,这篇文章主要介绍零配置实现ioc,现在相信大家项目中也基本都是没有了xml配置文件.废话不多说.一起学习 代码示例 BookDao.java package com ...
- 01 基于umi搭建React快速开发框架
介绍 基于umi搭建一个快速开发框架,react 应用框架.umi 以路由为基础的,支持类 next.js 的约定式路由,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载. 我们会 ...
- 我的Linux系统九阴真经
在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了.各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公司,越来越多.有一些公 ...
- Linux下创建和删除软、硬链接 可临时处理空间不足
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问. ...
- ansible系列5-开启加速 Ansible 执行速度的功能
SSH pipelining 是一个加速 Ansible 执行速度的简单方法.ssh pipelining 默认是关闭,之所以默认关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选 ...
- Hibernate的继承映射
对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: <hibernate ...
- BZOJ5337 [TJOI2018] 碱基序列 【哈希】【动态规划】
题目分析: 这道题的难点在于要取模,而题面没有写. 容易想到一个O(1E7)的dp.KMP或者哈希得到相关位置然后对于相关位置判断上一个位置有多少种情况. 代码: #include<bits/s ...