SCOI 2008 【奖励关】
早上的考试一道都做不出,被教做人,心态爆炸ing。。。。。。
题目描述:
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。
宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1 次系统都抛出宝物1(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。
获取第 i 种宝物将得到Pi分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过一次,才能吃第i 种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi 可以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。
假设你采取最优策略,平均情况你一共能在奖励关得到多少分值?
1 <= k <= 100, 1 <= n <= 15,分值为[-106,106]内的整数。
思路分析:
n很小,很明显的状压DP,二进制状态sta表示n件宝物吃的状态,0表示还没吃,1表示吃过了。推出dp的状态,f[i][sta]表示目前处于第i轮,在前i轮吃到宝物的状态为sta,采用最优策略能够得到的最大期望价值。
转移时枚举j,表示第i个轮,掉下的是j号宝物。
但是会发现转移很难写,或者说根本写不了。为什么呢?下面就和大家来讨论一下。
写我为人人型——无法判断第i个宝物吃与不吃哪一个更优(因为推过去之后一个取的话是[i+1][sta|1<<(j-1)],不取的话是[i+1][sta],两者不一致)
写人人为我型——无法判断它是由哪一个状态转移过来的 (因为可能第i轮枚举到的j是唯一的一个j类型宝物,而也有可能是唯一的一个,所以很难分辨该从哪一种状态转移过来)
那么我们应该怎么做呢?——正着做怎么都不行,那就倒着来呗!
状态:f[i][sta]表示从第i轮到第k(总轮数),都取最优方案,而现在正处于第i-1回合,吃到宝物的状态为sta,能够得到的最大期望价值。
转移时枚举一个j表示在第i-1轮出现的宝物为j(下面的pre数组是由宝物j能够被选的前提物品01(二进制上第i位0/1表示第i件物品是/不是物品j的前提物品)状态压成的十进制数,w为价值)
条件:sta|pre[j]=pre[j] 转移:f[i][sta]=f[i][sta]+max(f[i+1,sta],f[i+1,sta|1<<(j-1)]+w[j])
条件:sta|pre[j]<>pre[j] 转移:f[i][sta]=f[i][sta]+f[i+1][sta]
其中f[i+1][sta|1<<(j-1)]表示第i-1轮吃宝物j,f[i+1][sta]表示第i-1轮不吃宝物j。
代码实现:
var
f:array[0..101,0..50000]of double;
pre,w:array[0..15]of longint;
x,k,n,i,sta,j:longint;
function max(a,b:double):double;
begin
if a>b then exit(a) else exit(b);
end;
begin
read(k,n);
for i:=1 to n do
begin
read(w[i],x);
while x<>0 do
begin
pre[i]:=pre[i] or 1<<(x-1);
read(x);
end;
end;
for i:=k downto 1 do
for sta:=0 to 1<<n-1 do
for j:=1 to n do
if sta and pre[j]=pre[j] then
f[i,sta]:=f[i,sta]+max(f[i+1,sta]/n,(f[i+1,sta or 1<<(j-1)]+w[j])/n)
else
f[i,sta]:=f[i,sta]+f[i+1,sta]/n;
writeln(f[1,0]:0:6);
end.
SCOI 2008 【奖励关】的更多相关文章
- [SCOI 2008] 奖励关
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1076 [算法] f[i][S]表示当前第i次抛出宝物,目前集合为S,所能获得的最高分 ...
- 【SCOI 2008】奖励关
Problem Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关. 在这个奖励关里,系统将依次随机抛出 \(k\) 次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之 ...
- Bzoj1076 [SCOI2008]奖励关
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1935 Solved: 1053 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一 ...
- 【bzoj1076】[SCOI2008]奖励关
题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再 ...
- 【BZOJ1076】[SCOI2008]奖励关 状压DP+期望
[BZOJ1076][SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...
- 【BZOJ-1076】奖励关 概率与期望 + 状态压缩DP
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1602 Solved: 891[Submit][Status ...
- 【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)
http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有时候人蠢还真是蠢.一开始我看不懂期望啊..白书上其实讲得很详细的,什么全概率,全期望(这个压 ...
- 【BZOJ】【1076】【SCOI2008】奖励关
状压DP+数学期望 蒟蒻不会啊……看题跑…… Orz了一下Hzwer,发现自己现在真是太水了,难道不看题解就一道题也不会捉了吗? 题目数据范围不大……100*(2^16)很容易就跑过去了…… DP的时 ...
- 1076: [SCOI2008]奖励关( dp )
期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...
随机推荐
- springBoot整合spring security+JWT实现单点登录与权限管理--筑基中期
写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...
- vue <compent> 结合is实现动态切换子组件
这里就很自然的产生一个新问题:如何给相应的子组件传props?
- JS中有趣的内置对象-JSON
前言 在以前的web开发中,我们多数选择纯文本或XML作为我们的提交的数据格式,大多数是XML,少数纯文本.其实从AJAX(Asynchronous JavaScript and XML)的命名我们也 ...
- 在MyBatis中采用模糊查询变量的引用标志应当是$而不是#
具体如下例: @Select("select count(*) from hy_stock where name like '%${keyword}%' or code like '%${k ...
- 借助rownum中求Oracle表中前三名(三甲:状元榜眼探花)的方法(总计三种方法,以讲述rownum的使用为主)
要求前三名,MySQL中有order by排序,limit限制数量,结果很容易得到,而且limit的执行顺序也在order by之后,写出的sql高效易懂而不易出错. 但在oracle中,由于没有li ...
- 为什么选择H5游戏开发定制?
为什么选择H5游戏开发定制? 随着微信H5游戏推广带来的显著效果,越来越多的商家已经加入到游戏营销的队伍中来, 对H5小游戏有了解的商家都知道,[模板游戏]的价格往往低于[定制游戏]的价格,可是为什么 ...
- html基础:css样式2
1.字体边框基本设置 <!--border边框:solid实线,red红色,1px粗--> <!--font-weight: bolder字体加粗 font-size:字体大小--& ...
- 查看windows和linux下端口是否被占用
1.windows cmd输入netstat -ano |findstr "端口号" 查看到1202端口被使用的进程PID是10692 输入tasklist |findstr 10 ...
- ctfhub 报错注入
payload 1 Union select count(*),concat((查询语句),0x26,floor(rand(0)*2))x from information_schema.colu ...
- CTF-BugKu-杂项-29-33
2020.09.15 今天换个新壁纸,换个新背景音乐,燃起来 做题 第二十九题 论剑 https://ctf.bugku.com/challenges#论剑 图片详情没啥信息,不是正方形,考虑改成正方 ...