为了这道题我学了期望 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. ThinkPHP6.0在phpstorm添加查询构造器和模型的代码提示

    ThinkPHP6.0升级后 使用查询构造器和模型都没有了提示 原因是tp6源码中没有添加注释 找到Model.php * @method Query where(mixed $field, stri ...

  2. vite安装使用流程

    安装vite 使用npm npm create vite@latest 使用yarn yarn create vite 使用pnpm pnpm create vite 还有一些选择配置比如使用那种框架 ...

  3. 数电第六周周结_by_yc

    时序逻辑电路的设计要点:   ①只有时钟信号和复位信号可以放在敏感列表里:   ②使用非阻塞赋值,即使用"<=";   ③无需对所有分支进行描述,对于未描述的分支,变量将保持 ...

  4. Fastjson漏洞+复现

    1.漏洞介绍 ​​FastJson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性.通过查找代码中相关的方法,即可构造出一些恶意利用链. ...

  5. JavaEE Day02MySQL

    今日内容 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL语句 一.数据库的基本概念 1.数据库DataBase,简称DB 2.什么是数据库?         用于存储和管理数据的仓库 ...

  6. 云原生 • Kubernetes 认识 k8s、k8s 架构、核心概念点介绍

    云原生 • Kubernetes 认识 k8s.k8s 架构.核心概念点介绍 一.Kubernetes 简介Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌.谷歌早在十几年之 ...

  7. .NET周报【12月第1期 2022-12-08】

    国内文章 CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了? https://www.cnblogs.com/savorboard/p/cap-7-0.html) 今天,我们很高兴宣布 CAP ...

  8. 快速入门JavaScript编程语言

    目录 JS简介 JS基础 1.注释语法 2.引入js的多种方式 3.结束符号 变量与常量 let和var的区别 申明常量 const 严格模式 use strict 基本数据类型 1.数值类型(Num ...

  9. Jmeter 定时器之同步定时器(Synchronizing Timer)

    性能测试中需要模拟多用户并发测试,此时需要用到同步定时器(Synchronizing Timer).如下图,模拟用户组的数量设置20,相当于20个用户(线程)并发 名词解释: 名称:定时器名称,可根据 ...

  10. get请求拼接数组转字符串

    get请求拼接数组转换成字符串