你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出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. android项目中导入actionbarsherlock 需要注意的地方

    1,在导入actionbarsherlock 这个library时,如果一直报" Invalid Project Description" ;  解决办法:  android中li ...

  2. LintCode-159.寻找旋转排序数组中的最小值

    寻找旋转排序数组中的最小值 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 你可以假设数组中不存在重复的 ...

  3. iOS开发热更新JSPatch

    JSPatch,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug. 是否有过这样的经历 ...

  4. #Leetcode# 951. Flip Equivalent Binary Trees

    https://leetcode.com/problems/flip-equivalent-binary-trees/ For a binary tree T, we can define a fli ...

  5. PAT 甲级 1038 Recover the Smallest Number

    https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704 Given a collection of ...

  6. tomcat web页面管理应用配置

    大部分时候,我们的tomcat服务器都不是部署在本机,那么怎么样不通过ftp/sftp方式来将war包部署到tomcat容器呢? tomcat有提供web页面管理应用的功能. 我们来看看怎么配置实现该 ...

  7. AMH面板命令操作大全

    LNMP面板 - AMH 命令使用nginx篇 » SSH Nginx1) 有步骤提示操作: ssh执行命令: amh nginx然后选择对应选项进行操作. 2) 或直接操作: 启动Nginx: am ...

  8. Android基础------Intent组件

    1.什么是intent 同Activity一样,也是Android应用组件在Android中承担着一种指令输出的作用Intent负责对应用中一次操作的动作及动作相关的数据进行描述.Android则根据 ...

  9. Microsoft Edge goes Chromium

    Microsoft Edge goes Chromium https://techcrunch.com/2018/12/06/microsoft-edge-goes-chromium-and-maco ...

  10. BZOJ4860 Beijing2017树的难题(点分治+单调队列)

    考虑点分治.对子树按照根部颜色排序,每次处理一种颜色的子树,对同色和不同色两种情况分别做一遍即可,单调队列优化.但是注意到这里每次使用单调队列的复杂度是O(之前的子树最大深度+该子树深度),一不小心就 ...