1076: [SCOI2008]奖励关
1076: [SCOI2008]奖励关
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 2078 Solved: 1118
[Submit][Status][Discuss]
Description
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,
每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。
宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝物1(
这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第i种宝物将得到Pi
分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过
一次,才能吃第i种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi可
以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你
采取最优策略,平均情况你一共能在奖励关得到多少分值?
Input
第一行为两个正整数k和n,即宝物的数量和种类。以下n行分别描述一种宝物,其中第一个整数代表分值,随
后的整数依次代表该宝物的各个前提宝物(各宝物编号为1到n),以0结尾。
Output
输出一个实数,保留六位小数,即在最优策略下平均情况的得分。
Sample Input
1 0
2 0
Sample Output
HINT
【数据规模】
1<=k<=100,1<=n<=15,分值为[-10^6,10^6]内的整数。
Source
题解:
f[i][j]表示当前第i轮,状态j的期望得分
对于最优决策的题,一般都倒着做,因为正着做的话会有多个选择
而如果倒着做的话则对应一个前继
貌似期望DP一般都是倒着推的
以上都是听说。
如果当前状态j包含了k物品的前置条件(利用(j&need[k])==j检验包含关系),就尝试从下一轮(i+1)的拿了k物品的状态转移。
其实就是决定下轮如果得到k物品,取(满足前置条件)还是不取。
所以说本轮尝试拿的物体其实是下一轮的,因为N轮时尝试从N+1轮拿物体,所以最后1轮从2轮拿算完就刚好拿了n次物体。
每轮每个状态期望得分是1/k*score1+1/k*score2+...1/k*scorek,提取1/k就可以得到
本轮期望=(下轮期望+本次得分)/K(因为是逆推)
摘自网络
#include<cstdio>
#include<iostream>
using namespace std;
const int N=,Z=<<;
int n,k,p[N],score[N];
double f[N][Z];
int main(){
scanf("%d%d",&n,&k);
for(int i=,t;i<=k;i++){
scanf("%d%d",&score[i],&t);
for(;t;scanf("%d",&t)) p[i]|=<<t-;
}
int all=(<<k)-;
for(int i=n;i;i--){
for(int j=;j<=all;j++){
for(int h=;h<=k;h++){
if((p[h]&j)==p[h])
// if(j==p[h]) //分数是叠加不是赋予
f[i][j]+=max(f[i+][j],f[i+][j|(<<h-)]+score[h]);
else
f[i][j]+=f[i+][j];//即使没有前置条件,也要有不取的分数叠加。
}
f[i][j]/=(double)k;
}
}
printf("%.6lf\n",f[][]);
return ;
}
1076: [SCOI2008]奖励关的更多相关文章
- 1076: [SCOI2008]奖励关( dp )
期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...
- 【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)
http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有时候人蠢还真是蠢.一开始我看不懂期望啊..白书上其实讲得很详细的,什么全概率,全期望(这个压 ...
- bzoj 1076: [SCOI2008]奖励关
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝 ...
- ●BZOJ 1076 [SCOI2008]奖励关
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1076题解: 期望dp. (模糊的题意,2333) 题中的:"现在决定不吃的宝物以后 ...
- 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP
[题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...
- BZOJ 1076: [SCOI2008]奖励关(概率+dp)
首先嘛,看了这么久概率论真的不错啊。看到就知道怎么写(其实也挺容易的= =) 直接数位dp就行了 CODE: #include<cstdio> #include<cstring> ...
- BZOJ 1076: [SCOI2008]奖励关 [DP 期望 状压]
传送门 题意:$n$种宝物,出现$k$次每次一种,每种宝物有价值和吃掉它之前必须要吃掉的宝物的集合,求采取最优策略的期望最大价值 1<=k<=100,1<=n<=15,分值为[ ...
- BZOJ.1076.[SCOI2008]奖励关(概率DP 倒推)
题目链接 BZOJ 洛谷 真的题意不明啊.. \(Description\) 你有k次选择的机会,每次将从n种物品中随机一件给你,你可以选择选或不选.选择它会获得这种物品的价值:选择一件物品前需要先选 ...
- bzoj 1076: [SCOI2008]奖励关【状压dp+概率dp】
设f[i][s]为前i步,选的礼物集合为s的方案数,然而并不会转移-- 看了hzwer的blog,发现要倒着转移,然后答案就是f[1][0] 妙啊 #include<iostream> # ...
随机推荐
- Selenium webdriver Java 元素操作
本来这些东西网上一搜一大堆,但是本着收集的精神,整理一份放着吧!哈!哈!哈! 1. 输入框(text field or textarea) WebElement element = driver.fi ...
- Unity 导出切片精灵
http://blog.csdn.net/akof1314/article/details/38845933 设有一张png/tga图集,导入到Unity,放置目录"Assets/Resou ...
- linux归档压缩命令
1.tar tar -cf output.tar file1.txt file2.txt .. tar -rvf output.tar fl ...
- Failed to add reference to 'System.Net.Http'. Please make sure that it is in the Global Assembly Cache.
关闭VS再来就好了
- testng入门_单元测试
1.定义TestNG 的配置文件 <test name="exampletest1"> <classes> <!--1.只执行com.t ...
- 206. Reverse Linked List【easy】
206. Reverse Linked List[easy] Reverse a singly linked list. Hint: A linked list can be reversed eit ...
- grub.conf文件说明
default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux ...
- Mysql之sync-binlog参数
Mysql开启bin-log日志使用bin-log时,默认情况下,并不是每次执行写入就与硬盘同步,这样在服务器崩溃是,就可能导致bin-log最后的语句丢失. 可以通过这个参数来调节,sync_bin ...
- PCB焊接工艺
1. 有铅焊接工艺 240~260℃. 2. BGA焊盘直径为球径80%.
- 大数据(6) - MapReduce简易介绍入门
一 MapReduce入门 MapReduce定义(简单来说就是hadoop的数据分析核心,理解其中的原理,则可以分析聚合一切需求) Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于 ...