[CODE FESTIVAL 2018]Sushi Restaurant
题意:有$n$个人,对每个人,他有$p_i$的概率饥饿值为$x_i$($1\leq i\leq m$),你现在要做$n$盘寿司,每盘寿司有一定的数量,当这$n$个人的饥饿值确定后他们会自己选择最优的(人,寿司)配对方案使得$C=\sum\limits_{i=1}^n\left\lvert h_i-c_i\right\rvert$最小(设第$i$个人饥饿值为$h_i$,吃的寿司数量为$c_i$),现在要合适地选择$c_{1\cdots n}$使得$C$的期望最小,输出这个最小的期望
首先,如果确定了$h_{1\cdots n},c_{1\cdots n}$,那么将它们都排序就可以得到最小的$C$,因为如果先把$h$从小到大排序,并且存在$c_i\gt c_j$,那么交换$c_i,c_j$不会让$C$变大
那么我们要最小化$\sum\limits_{i=1}^n\sum\limits_{j=1}^mt_{i,j}\left\lvert c_i-x_j\right\rvert$,其中$t_{i,j}$为这些随机变量中第$i$小的数是$x_j$的概率
设$u_{i,j}$为第$i$小的数$\leq x_j$的概率,那么$t_{i,j}=u_{i,j}-u_{i,j-1}$,我们要算$u$
设$s$为$p$的前缀和,因为恰有$k$个数$\leq x_j$的概率为$\binom nks_j^k(1-s_j)^{n-k}$,所以$u_{i,j}=\sum\limits_{k=i}^n\binom nks_j^k(1-s_j)^{n-k}$
最后的问题是要确定$c_i$使得$\sum\limits_{i=1}^n\sum\limits_{j=1}^mt_{i,j}\left\lvert c_i-x_j\right\rvert$最小,对每个$i$分开考虑,就是求一条折线上的最小值,而折线上的最小值只能在端点处取到,所以扫一遍即可
#include<stdio.h>
typedef long double du;
const du inf=9223372036854775807.;
void fmin(du&a,du b){
if(b<a)a=b;
}
du pow(du a,int b){
du s=1;
for(;b;b>>=1){
if(b&1)s*=a;
a*=a;
}
return s;
}
int x[2010],m;
du s[2010],c[2010][2010],t[2010][2010],st[2010];
du solve(du*t){
int i;
du res;
for(i=1;i<=m;i++){
st[i]=st[i-1]+t[i];
s[i]=s[i-1]+t[i]*x[i];
}
res=inf;
for(i=1;i<=m;i++)fmin(res,st[i]*x[i]-s[i]+s[m]-s[i]-(st[m]-st[i])*x[i]);
return res;
}
int main(){
int n,Q,i,j;
du res;
scanf("%d%d%d",&n,&m,&Q);
for(i=1;i<=m;i++){
scanf("%d%d",x+i,&j);
s[i]=s[i-1]+j/(du)Q;
}
c[0][0]=1;
for(i=1;i<=n;i++){
c[i][0]=1;
for(j=1;j<=i;j++)c[i][j]=c[i-1][j-1]+c[i-1][j];
}
for(i=n;i>0;i--){
for(j=1;j<=m;j++)t[i][j]=t[i+1][j]+c[n][i]*pow(s[j],i)*pow(1-s[j],n-i);
}
res=0;
for(i=1;i<=n;i++){
for(j=m;j>0;j--)t[i][j]-=t[i][j-1];
res+=solve(t[i]);
}
printf("%.8lf",(double)res);
}
[CODE FESTIVAL 2018]Sushi Restaurant的更多相关文章
- Codeforces Avito Code Challenge 2018 D. Bookshelves
Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...
- CODE FESTIVAL 2015 決勝(部分)
CODE FESTIVAL 2015 決勝(部分) B - ダイスゲーム 题意: 给\(N\)个\(6\)个面骰子,然后问掷到概率最大的点数是多少. 分析: 随便打表随便发现是\(\huge\left ...
- 【赛时总结】 ◇赛时·IV◇ CODE FESTIVAL 2017 Final
◇赛时-IV◇ CODE FESTIVAL 2017 Final □唠叨□ ①--浓浓的 Festival 气氛 ②看到这个比赛比较特别,我就看了一看--看到粉粉的界面突然开心,所以就做了一下 `(* ...
- 【AtCoder】CODE FESTIVAL 2016 qual A
CODE FESTIVAL 2016 qual A A - CODEFESTIVAL 2016 -- #include <bits/stdc++.h> #define fi first # ...
- 【AtCoder】CODE FESTIVAL 2016 qual B
CODE FESTIVAL 2016 qual B A - Signboard -- #include <bits/stdc++.h> #define fi first #define s ...
- 【AtCoder】CODE FESTIVAL 2016 qual C
CODE FESTIVAL 2016 qual C A - CF -- #include <bits/stdc++.h> #define fi first #define se secon ...
- CODE FESTIVAL 2017 qual B B - Problem Set【水题,stl map】
CODE FESTIVAL 2017 qual B B - Problem Set 确实水题,但当时没想到map,用sort后逐个比较解决的,感觉麻烦些,虽然效率高很多.map确实好写点. 用map: ...
- CODE FESTIVAL 2017 qual B C - 3 Steps【二分图】
CODE FESTIVAL 2017 qual B C - 3 Steps 题意:给定一个n个结点m条边的无向图,若两点间走三步可以到,那么两点间可以直接连一条边,已经有边的不能连,问一共最多能连多少 ...
- [AtCoder Code Festival 2017 QualB D/At3575] 101 to 010 - dp
[Atcoder Code Festival 2017 QualB/At3575] 101 to 010 有一个01序列,每次可以选出一个101,使其变成010,问最优策略下能操作几次? 考虑像 11 ...
随机推荐
- 【洛谷 P1502】 窗口的星星(扫描线)
题目链接 把每个星星作为左下角,做出长为\(w-0.5\),宽为\(h-0.5\)的矩形. \(-0.5\)是因为边框上的不算. 离散化\(y\)坐标. 记录\(2n\)个\(4\)元组\((x,y1 ...
- python-num18 - django进阶一
一.深入django的路由系统 下面为django的请求生命周期 下面来看下整个生命周期中的路由系统: 在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规则如下: " ...
- C - Contest Setting Gym - 101982C dp 补题
题目链接:https://vjudge.net/contest/273260#problem/C 学习了一下别人的思路,首先去重,然后离散化. dp数组开二维,每一次更新,状态转移方程,dp[ i ] ...
- perl6检测网站CMS脚本(测试代码)
代码如下: use HTTP::UserAgent; use JSON::Tiny; my $check-url = 'www.baidu.com'; #say @*ARGS[0]; #检测命令行参数 ...
- 二叉树的层序遍历(levelordertraverse)
数据结构关于二叉树的遍历还有一种层序遍历,按层次依次输出元素.最上层最先输出,同层中最左最先输出,使用队列这一结构来实现: int levelOrderTraverse(IDTree *pTree) ...
- TreeSet之定制排序和自然排序
TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字 ...
- mac 卸载 node并重新安装
系统升级到 Sierra 之后,npm 经常出问题,最终把 node 卸载了,安装了新版本.mac 卸载 node 比较麻烦,stackoverflow 上面找到一个方法还不错,特地记录下来,代码如下 ...
- 虚拟机NAT网络设置
1. 虚拟机设置 2. 本地网络设置 3. 本地虚拟网卡设置 4. 安装虚拟机,设置网络为NAT方式即可访问外网.
- 创建一个简单的Maven工程
Maven的工程结构如下图所示: 大致来看,Maven的工程结构如下: 在创建maven工程时,可以通过骨架创建,也可以不通过骨架创建. 我们先用idea通过骨架创建一个Maven工程. 配置pom. ...
- acm专题---最短路
spfa的时间复杂度是0(e) 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅 ...