为了这道题我学了期望 dp(?

为什么会有人期望 dp 入门是这道题啊歪(#`O′)

wtx 一眼秒杀了这题,我们一起来膜拜他!


其实这题很水但是我之前没学过期望 dp 我是什么 nt。

显然我们以每一轮游戏为阶段,同时要记录每个宝物的状态取或没取,宝物最多 15 个,很容易想到状压。

令 \(f_{i,S}\) 为已经到第 \(i\) 轮游戏,取了 \(S\) 到最后的取完的最大期望。

如果能选,那么对于第 \(j\) 个物品有两种可能,选或不选,因此 \(f_{i, S} = f_{i, S} + \max\{f_{i + 1, S}, f_{i + 1, S | (1 << j)} + p_j\}\)。

可能有人并不理解其实只有你 SBSX,为什么是 \(f_{i + 1, S | (1 << j)}\) 而不是 \(f_{i + 1, S - (1 << j)}\) 呢?因为这是倒推!倒推!倒推!倒推!

如果不能选显然 \(f_{i, S} = f_{i, S} + f_{i + 1, S}\),最后 \(f_{i, S} \gets f_{i, S} / n\)。

所以这题确实挺简单的。

//SIXIANG
#include <iostream>
#include <iomanip>
#define MAXN 100
#define QWQ cout << "QWQ" << endl;
using namespace std;
double f[MAXN + 10][(1 << 15) + 10], v[MAXN + 10];
int tot[MAXN + 10][MAXN + 10], c[MAXN + 10], pd[MAXN + 10];
void addbat(int &S, int k) {S -= (1 << k);}
bool get(int S, int k) {return ((S >> k) & 1);}
bool check(int S, int i) {
for(int p = 0; p < c[i]; p++)
if(!get(S, tot[i][p])) return 0;
return 1;
}
signed main() {
int k, n;
cin >> k >> n;
for(int p = 0; p < n; p++) {
cin >> v[p];
int t = 0;
while(1) {
cin >> tot[p][t];
if(!tot[p][t]) break;
pd[p] |= (1 << tot[p][t] - 1);
}
} for(int p = k; p >= 1; p--) {
for(int S = 0; S < (1 << n); S++) {
for(int i = 0; i < n; i++) {
if((S & pd[i]) == pd[i])
f[p][S] += max(f[p + 1][S], f[p + 1][S | (1 << i)] + v[i]);
else
f[p][S] += f[p + 1][S];
}
f[p][S] /= double(n);
}
} cout << fixed << setprecision(6) << f[1][0] << endl;
}

题解 [SCOI2008] 奖励关的更多相关文章

  1. 【BZOJ1076】[SCOI2008]奖励关 状压DP+期望

    [BZOJ1076][SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...

  2. 1076: [SCOI2008]奖励关

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2078  Solved: 1118[Submit][Statu ...

  3. 1076: [SCOI2008]奖励关( dp )

    期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...

  4. BZOJ_1076_[SCOI2008]奖励关_状压DP

    BZOJ_1076_[SCOI2008]奖励关_状压DP 题意: 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛 ...

  5. LG P2473 [SCOI2008]奖励关

    题目链接:P2473 [SCOI2008]奖励关 题意:有n个宝物 每次等概率抛出其中之一一共抛出k次每个宝物有一个价值 和一个前提集合只有集齐了集合中的所有宝物 才可以领取这个宝物 范围:1 < ...

  6. P2473 [SCOI2008]奖励关(期望)

    P2473 [SCOI2008]奖励关 $n<=15$,显然的状压 设$f[i][w]$表示前$i$轮,状态$w$的最大期望 蓝后我们发现一个问题:$f[i][w]$可能是非法的 于是我们从$f ...

  7. 洛谷 P2473 [SCOI2008]奖励关 解题报告

    P2473 [SCOI2008]奖励关 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出\(k\)次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝 ...

  8. 【洛谷】2473:[SCOI2008]奖励关【期望DP(倒推)】

    P2473 [SCOI2008]奖励关 题目背景 08四川NOI省选 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不 ...

  9. BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3074  Solved: 1599 [Submit][Sta ...

  10. [BZOJ1076][SCOI2008]奖励关 状压dp

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3070  Solved: 1595[Submit][Statu ...

随机推荐

  1. 外部引入css样式报错Resource interpreted as Stylesheet but transferred with MIME type html/text

    Resource interpreted as Stylesheet but transferred with MIME type html/text 解决方法: 1.将content-type改为t ...

  2. 2.6:Python数据存取-文件、文件夹及目录、数据库

    一.Python文件读写 1.文件的打开模式 <class '_io.TextIOWrapper'>和<class '_io.BufferedReader'>.python使用 ...

  3. windows安装grunt时提示不是内部或外部命令解决方案

    参考:https://www.cnblogs.com/hts-technology/p/8477258.html 安装windows安装elasticsearch-head时 不需要输入grunt s ...

  4. Go 每日一库之 go-carbon,优雅的golang日期时间处理库

    Carbon 是一个轻量级.语义化.对开发者友好的 golang 时间处理库,支持链式调用. Carbon 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧. github.c ...

  5. echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新

    目录 ECharts Map地图的显示 GeoJSON数据文件获取 在ECharts中绘制浙江省的数据 ECharts Map地图的显示 ECharts支持地理坐标显示,专门提供了一个geo组件,在s ...

  6. 基于ERNIELayout&pdfplumber-UIE的多方案学术论文信息抽取

    本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5196032?contributionType=1 基于ERNIELayout& ...

  7. Vue 修改对象(数组)没有立即生效

    在写项目时遇到了给数组赋值后,出现赋值延时的问题,解决办法如下 // Vue 不能检测以下变动的数组: // 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = ne ...

  8. 如何在mac电脑上配置命令行工具

    Hi,欢迎大家在有空的时候做客[江涛学编程],这里是2023年的第7篇原创文章,今天我们来聊一聊如何在mac电脑上配置命令行工具 老规矩,拍拍手,上菜. 同学,打开你的mac电脑,按住键盘上的&quo ...

  9. C语言:使用malloc申请一个二级指针,外层为3个元素,内层为5个元素。使用并释放。

    //使用malloc申请一个二级指针,外层为3个元素,内层为5个元素.使用并释放. #include"head.h" int main() { int **p = (int **) ...

  10. 红客突击队&突击队分队

    红客突击队,于2019年,由队长k龙联合国内多位顶尖高校研究生牵头成立.其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验.团队现有三十多位正式成员及若干预备人员,旨在打造国 ...