你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝物1(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第i种宝物将得到Pi分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过一次,才能吃第i种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi可以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你采取最优策略,平均情况你一共能在奖励关得到多少分值?

  其实题目有个地方刚开始没看懂...

  刚开始说了你必须在跑出下一个宝物之前做出选择,然后我以为和执行最优策略矛盾了...

  事实上你所得到的都是期望得分

  必须在跑出下一个宝物之前作出选择,是因为游戏的具体过程是由系统操作的我们不清楚

  而执行最优策略只要在系统执行的一些概率条件下 作出能够得到最大期望得分的操作

  我们考虑倒序DP

  枚举当前是哪一轮,以及作出选择之前n个数取与不取的状态是怎样的

  再枚举这一轮系统抛下的宝物是哪一件

  如果满足这个宝物可以取,就在取与不取之间作取舍,如果不可以取,就只能不取

  最后再思考一个问题

  题目中有一句话“现在决定不吃的宝物以后也不能再吃”,这个限制在DP过程中并没有体现

  另外要注意,这个条件限制存在仅当目前这个宝物可以吃,也就是我们有自主选择的权利

  然而仔细想一想便可知是不存在问题的

  因为当前可以吃的宝物,以后一定也可以吃,因为已经满足了前提宝物集合的条件

  然而现在吃掉,在以后还可以吃一些前提宝物集合为当前宝物的宝物

  所以当前吃掉一定比以后吃掉的策略要优秀

  所以在执行最优决策的过程中是不存在现在不吃以后吃的情况的~

 program bzoj1076;
const maxn = ;maxm = ;
var i,k,n,x,j,p:longint;
w:array[-..maxn]of longint;
a:array[-..,-..]of longint;
vis:array[-..,-..maxm]of boolean;
f:array[-..maxn,-..maxm]of extended; function ok(x,y:longint):boolean;
var i:longint;
tmp:array[-..]of longint;
begin
for i:= to n do tmp[i]:=y >> (n-i) and ;
for i:= to a[x,] do if tmp[a[x,i]]= then exit(false);
exit(true);
end; function max(a,b:extended):extended;
begin
if a>b then exit(a) else exit(b);
end; begin
readln(k,n);
fillchar(a,sizeof(a),);
for i:= to n do
begin
read(w[i]);
read(x);
while x<> do
begin
inc(a[i,]);
a[i,a[i,]]:=x;
read(x);
end;
readln;
end;
for i:= to n do
for j:= to << n- do vis[i,j]:=ok(i,j);
for i:=k downto do //i表示当前进行到第i轮
for j:= to << n- do //n件物品取与不取的状态
begin
for p:= to n do if vis[p,j] then f[i,j]:=f[i,j]+max(f[i+,j],f[i+,j or ( << (n-p))]+w[p]) else f[i,j]:=f[i,j]+f[i+,j];
f[i,j]:=f[i,j]/n;
end;
writeln(f[,]::);
end.

[BZOJ1076][SCOI2008]奖励关解题报告|状压DP的更多相关文章

  1. 2018.09.23 bzoj1076: [SCOI2008]奖励关(期望+状压dp)

    传送门 一道神奇的期望状压dp. 用f[i][j]f[i][j]f[i][j]表示目前在第i轮已选取物品状态为j,从现在到第k轮能得到的最大贡献. 如果我们从前向后推有可能会遇到不合法的情况. 所以我 ...

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

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

  3. [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP

    在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...

  4. 【SCOI2008】奖励关 题解(状压DP+期望)

    题目链接 题目大意:给定$n$个宝物,每次随机抛出一个宝物,奖励分数为$p_i$.但如果选这个宝物必须选过它的前置宝物集合.共进行$K$轮问最优策略下的期望. $n\leq 15,-10^6\leq ...

  5. 洛谷P2473 [SCOI2008]奖励关(期望+状压)

    传送门 我数学期望还是太差了…… 先考虑状压模型,设$dp[i][S]$表示第$i$轮,当前宝物状态为$S$,能获得的最大期望分数 然而这个模型有一个问题,第$i$轮不一定能达到状态$S$ 那么考虑转 ...

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

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

  7. bzoj1076: [SCOI2008]奖励关(期望dp+状压dp)

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

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

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

  9. BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1076 题意概括 有n个东西,k次扔出来.每次等概率扔出其中一个. 你可以拿这个东西,但是有条件,得 ...

随机推荐

  1. lintcode-197-排列序号

    197-排列序号 给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号.其中,编号从1开始. 样例 例如,排列 [1,2,4] 是第 1 个排列. 思路 参考http://www ...

  2. lintcode-172-删除元素

    172-删除元素 给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度. 元素的顺序可以改变,并且对新的数组不会有影响. 样例 给出一个数组 [0,4,4,0,0,2,4,4],和值 4 ...

  3. iOS-UILabel加线

    NSAttributedString *attrStr =[[NSAttributedString alloc]initWithString:[NSString stringWithFormat:], ...

  4. 【week5】psp

    本周psp psp饼图: 随笔字数折线图: 代码行折线图:

  5. document,element,dom对象api详解

    Document对象: 根元素的访问,也就是HTML标签的访问.使用document.documentElement访问根对象. 使用Document对象查找对象 getElementById():通 ...

  6. CentOS基础命令

    为网卡配置静态IP地址建议通过交互式界面nmtui进行配置 firewalld和iptablesCentOS7使用firewald取代原来的iptables,但实际上底层还是iptables,在上层加 ...

  7. sql 插入列放第一列

    如果是SQLSERVER 的话就这样:select * from dbo.syscolumns where id=OBJECT_ID(N'你的表名') 然后COLID这列就是列的顺序 修改这个字段就行 ...

  8. (sender as TButton).some 和 TButton(sender).some 的区别是什么?

    (sender as TButton).some 和 TButton(sender).some 的区别是什么? (Sender as TButton) 与 TButton(Sender) 都是 Typ ...

  9. 使用WebClient类对网页下载源码,对文件下载保存及异步下载并报告下载进度

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAx4AAAI7CAIAAADtTtpYAAAgAElEQVR4nO3dX6xlV33Y8f3UJFUqHq

  10. snmpwalk的报文检测

    1.先用nc起一个监听的端口,然后看报文是不是正确的: 注:nc是一个模拟各种网络协议的东西,模拟服务器.客户端等: 2.触发告警,让他发报文: 3.用nc模拟一个服务端,启动一个udp的端口163: ...