考虑我们在某个时刻,剩下的数有 $ i $ 个,这些数的和为 $ j $,那么我们期望要抽 $ n \over i $ 次才能取到一个新的物品,这个物品的期望权值为 $ j \over i $,我们花了 $ ({n \over i} - 1) * ({x \over 2}) $ 的价格买到了一个 $ j \over i $ 的物品,如果前者小于后者,选择抽物品更优。可以用背包求出每个状态的概率

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define Fast_cin ios::sync_with_stdio(false), cin.tie(0);
#define rep(i, a, b) for(register int i = a; i <= b; i++)
#define per(i, a, b) for(register int i = a; i >= b; i--)
using namespace std; typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef long long ll; template <typename _T>
inline void read(_T &f) {
f = 0; _T fu = 1; char c = getchar();
while(c < '0' || c > '9') { if(c == '-') fu = -1; c = getchar(); }
while(c >= '0' && c <= '9') { f = (f << 3) + (f << 1) + (c & 15); c = getchar(); }
f *= fu;
} template <typename T>
void print(T x) {
if(x < 0) putchar('-'), x = -x;
if(x < 10) putchar(x + 48);
else print(x / 10), putchar(x % 10 + 48);
} template <typename T>
void print(T x, char t) {
print(x); putchar(t);
} const int N = 105; double f[N][N * N], c[N][N], ans;
int a[N];
int n, x, sum; int main() {
read(n); read(x);
f[0][0] = c[0][0] = 1;
for(register int i = 1; i <= n; i++) {
c[i][0] = 1;
for(register int j = 1; j <= i; j++) {
c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
}
}
for(register int i = 1; i <= n; i++) {
read(a[i]);
for(register int j = i - 1; j >= 0; j--) {
for(register int k = sum; k >= 0; k--) {
f[j + 1][k + a[i]] += f[j][k];
}
}
sum += a[i];
}
ans = sum;
for(register int i = 1; i <= n; i++) {
for(register int j = 0; j <= sum; j++) {
double val = ((double)n / i - 1) * x / 2 + x, p = (double)j / i;
if(val <= p) ans -= (p - val) / c[n][i] * f[i][j];
}
}
printf("%.9lf\n", ans);
return 0;
}

codeforces1267G的更多相关文章

随机推荐

  1. CMD使用的几个小技巧

    一.自定义窗口初始化大小 以前在Windows 7的时候感觉打开cmd时窗口初始化的大小还是比较合适的,但到Windows 10之后打开cmd窗口就很大一点都不适应----当然也可能是新电脑分辨率比较 ...

  2. springboot处理date参数

    前言 最近在后台开发中遇到了时间参数的坑,就单独把这个问题提出来找时间整理了一下: 正文 测试方法 bean代码: public class DateModelNoAnnotation { priva ...

  3. C#RSA对接JAVA中RSA方式

    C#中通过FromXmlString属性加载的是XML形式,而JAVA中用到的是解析后的PEM格式的字符串,总之读取证书中信息无非是转换方式问题 /// <summary> /// c# ...

  4. 将EntityFrameworkCore生成的SQL语句输出到控制台,使用hangfire

    将EntityFrameworkCore生成的SQL语句输出到控制台 参考文档如下 EF Core 日志记录要求使用一个或多个日志记录提供程序配置的 ILoggerFactory. 日志记录-EF C ...

  5. Linux 脚本在线安装docker

    2019/11/28, CentOS 8, docker 19.03.5, docker-compose 1.25.0 摘要:CentOS8使用脚本安装docker,dnf安装rpm,安装docker ...

  6. 测试欧气的小游戏-java

    Java 用我们学到的知识做处一个小的项目或者游戏等等应该都或多或少的有一点点的成就感吧,下列就是我用所学的基础知识做的猜字谜游戏,并且给他赋予了灵魂哈哈哈.有兴趣的可以尝试的用自己会的知识做一些小的 ...

  7. 利用Beef劫持客户端浏览器

    利用Beef劫持客户端浏览器   环境: 1.Kali(使用beef生成恶意代码,IP:192.168.114.140) 2.一台web服务器(留言板存在XSS跨站脚本漏洞,IP:192.168.11 ...

  8. Middle English finaunce金融

    Etymology finance From Middle English finaunce, a surety bond.A supply of money or goods. With thy b ...

  9. BeanPostProcessor后置处理器原理以及ApplicationListener原理

    BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的 1.BeanFactoryPostProcessor:BeanFactory的后置处理器; 在Bean ...

  10. MySQL数据库中字符串函数之left、right用法

    语法 LEFT(str,len) Returns the leftmost len characters from the string str, or NULL if any argument is ...