题解 [SCOI2008] 奖励关
为了这道题我学了期望 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] 奖励关的更多相关文章
- 【BZOJ1076】[SCOI2008]奖励关 状压DP+期望
[BZOJ1076][SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...
- 1076: [SCOI2008]奖励关
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2078 Solved: 1118[Submit][Statu ...
- 1076: [SCOI2008]奖励关( dp )
期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...
- BZOJ_1076_[SCOI2008]奖励关_状压DP
BZOJ_1076_[SCOI2008]奖励关_状压DP 题意: 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛 ...
- LG P2473 [SCOI2008]奖励关
题目链接:P2473 [SCOI2008]奖励关 题意:有n个宝物 每次等概率抛出其中之一一共抛出k次每个宝物有一个价值 和一个前提集合只有集齐了集合中的所有宝物 才可以领取这个宝物 范围:1 < ...
- P2473 [SCOI2008]奖励关(期望)
P2473 [SCOI2008]奖励关 $n<=15$,显然的状压 设$f[i][w]$表示前$i$轮,状态$w$的最大期望 蓝后我们发现一个问题:$f[i][w]$可能是非法的 于是我们从$f ...
- 洛谷 P2473 [SCOI2008]奖励关 解题报告
P2473 [SCOI2008]奖励关 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出\(k\)次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝 ...
- 【洛谷】2473:[SCOI2008]奖励关【期望DP(倒推)】
P2473 [SCOI2008]奖励关 题目背景 08四川NOI省选 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不 ...
- BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3074 Solved: 1599 [Submit][Sta ...
- [BZOJ1076][SCOI2008]奖励关 状压dp
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3070 Solved: 1595[Submit][Statu ...
随机推荐
- jquery操作class
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Kubernetes-基于容器云构建devops平台
1.基于kubernetes devops的整体方案 本文以Kubernetes为基础,为基于java语言研发团队提供一套完整的devops解决方案.在此方案中,开发人员基于eclipse集成开发环境 ...
- 什么是NineData?突然就火了
NineData 是集成了 SQL 开发.数据复制.数据备份.数据对比多个模块的云服务,支持混合云(自建库+云数据库的业务架构)和多云(多个不同云厂商数据库组成的业务架构)架构下的企业数据管理,大幅降 ...
- 解读JVM级别本地缓存Caffeine青出于蓝的要诀2 —— 弄清楚Caffeine的同步、异步回源方式
大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 上一篇文章中,我们继Guava Cac ...
- f-strings: Python字符串处理的瑞士军刀
从 3.6 开始,Python 新增了一个格式化字符串的方法,称之为 f-string. 其用法就是在python原始字符串的基础上增加 f/F 前缀,以大括号 {} 标明被替换的字段. f-stri ...
- Mapper的动态代理
可以自动生产接口的实现类 ,所以就不需要再写daoImpl这个实现类了, 直接使用sqlSession.getMapper自动生成实现类 @Before 此注解的目的是为了将@Befoe 作为首先执行 ...
- Ubuntu 22.04 安装搜狗输入法
下载搜狗输入法 下载地址https://shurufa.sogou.com/linux 也可以命令下载 wget https://ime.sogouimecdn.com/202212182151/3b ...
- MySQL 插入数据 数据重复 从另一个表导入数据
当使用MySQL插入数据时,我们可以根据需求选择合适的插入语句. 一.方法分类 二.具体方法 使用场景 作用 语句 注意 常规插入 忽略字段名 insert into 表名 values (值1, 值 ...
- CF1779C Least Prefix Sum 题解
CF链接:Least Prefix Sum Luogu链接:Least Prefix Sum $ {\scr \color {CornflowerBlue}{\text{Solution}}} $ 先 ...
- 最最最常用的Git提交规范以及常用命令总结
提交规范 为什么要制定提交规范? 便于对提交历史进行追溯,以及快速定位 代码改动的历史更加清晰 格式化的 Commit Message 才可以用于自动化输出 Change log 如何制定提交规范? ...