当前位置: 首页 > news >正文

qoj2607 Survey

题意

\(n\) 个人,\(m\) 元钱,每个人有一个最低要求工资 \(a_i\)。你需要把 \(m\) 元分成 \(n\) 份工资,每个人会随机得到一份,使得满足最低要求工资的人数期望最多。

\(n\le 1000,m\le 5000\)

思路

考虑期望的线性性质,满足最低要求工资的人数即每个人能满足要求的概率之和,即 \(ans=\sum_{i=1}^n p_i\)

对于每个人来说,满足条件概率即为分到大于等于 \(a_i\) 工资的概率,即 \(p_i=\frac{\sum_{j=1}^n [x_j\ge a_i]}{n}\)

最后则有 \(ans=\frac{\sum_{i=1}^n\sum_{j=1}^n [x_j\ge a_i]}{n}\)

于是我们设 \(f_{i,j}\) 表示将 \(j\) 元钱分成了 \(i\) 份工资时 \(\sum_{i=1}^n\sum_{j=1}^n [x_j\ge a_i]\) 的最大值,且每份工资单调不递增

假设增加了一份 \(k\) 元的工资,则该值会增加 \(\sum_{i=1}^n [a_i\ge k]\),可以使用前缀和处理。

由于每份工资单调不递增,所以第 \(i\) 份工资的上限即为 \(\lfloor\frac{m}{i}\rfloor\),因为要保证前面的工资都大于这份工资。

\(c_i=\sum_{i=1}^n [a_i\ge k]\) 于是就有:

\[f_{i,j}=\max\{f_{i-1,j-k}+c_k\} \pod{1\le i\le n,0\le j\le m,0\le k\le \min(j,\lfloor\frac{m}{i}\rfloor)} \]

最后 \(\frac{f_{n,m}}{n}\) 即为答案,复杂度 \(O(nm\log m)\)

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,c[5005];
double f[1005][5005];
signed main() {cin>>n>>m;for(int x,i=1;i<=n;i++)cin>>x,c[x]++;for(int i=1;i<=m;i++)c[i]+=c[i-1];for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){for(int k=0;k<=min(j,m/i);k++){f[i][j]=max(f[i][j],f[i-1][j-k]+c[k]);}}}printf("%.15lf",f[n][m]/n);return 0; 
}
http://www.hskmm.com/?act=detail&tid=1652

相关文章:

  • ubuntu24修改网络ip
  • ShardingSphere入门篇
  • 一个完整的项目管理流程都包括哪些环节?
  • 第5讲 机器学习生态构成 - 详解
  • Scaling Law之后AI的下一站:数据质量、效率与闭环的“军备竞赛”
  • nginx基础
  • tarjan割边
  • Linux lsblk (list hard drive) lsusb(list usb device)
  • 【SPIE出版】第二届信号处理与神经网络应用国际学术会议(SPNNA 2025)
  • OI的深渊
  • 当前流行的前端框架
  • 移远EC800M RTOS笔记
  • Linux 实例:配置 NTP 服务
  • 选择MyEMS:为什么开源是能源数字化未来的最佳路径?
  • 0909模拟赛总结
  • 2025年前端开发,流框架的对比及最佳实践建议
  • 开发过程中常见的设计模式
  • 【OpenCV】9 图像基本变换
  • Java第二周课前思考
  • 2025 Vue UI 组件库选型
  • FHQ-Treap
  • 什么是ARM架构?你需要知道的一切
  • 程序连接金仓数据库查询报错:ERROR:column r.id does not exist。字段不存在
  • 论Intel CPU 进化史:德承工控机全面进化 搭载新一代 Intel Core™ Ultra 7/5/3 处理器 - Johnny
  • STM32F103C8T6标准库移植FreeRTOS教程
  • mysql绿色版,无需安装的快速数据库解决方案
  • MyEMS:功能强大的开源能源管理系统,助力企业实现精细化能效管理
  • mysql唯一索引,原理、创建与应用详解
  • redis查询和添加key的最简单方法
  • 111111