BZOJ 题目1076: [SCOI2008]奖励关(状压DP+期望,反向推)
2015-10-11 10:59
225 查看
1076: [SCOI2008]奖励关
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1219 Solved: 687
[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 21 0
2 0
Sample Output
1.500000HINT
【数据规模】1<=k<=100,1<=n<=15,分值为[-10^6,10^6]内的整数。
Source
orz HZWER
这一步的期望=(上一步的期望+这一步的得分)/K
倒着推规避无效的状态
ac代码
/************************************************************** Problem: 1076 User: kxh1995 Language: C++ Result: Accepted Time:2360 ms Memory:104740 kb ****************************************************************/ #include<stdio.h> #include<string.h> #define max(a,b) (a>b?a:b) double dp[101][1<<17]; int d[1<<17]; int v[101]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i,j,k; memset(d,0,sizeof(d)); memset(dp,0,sizeof(dp)); for(i=1;i<=m;i++) { int x; scanf("%d%d",&v[i],&x); while(x) { d[i]+=(1<<(x-1)); scanf("%d",&x); } } int rt=(1<<m)-1; for(i=n;i>0;i--) { for(j=0;j<=rt;j++) { for(k=1;k<=m;k++) { if((d[k]&j)==d[k]) { dp[i][j]+=max(dp[i+1][j],dp[i+1][j|(1<<(k-1))]+v[k]); } else dp[i][j]+=dp[i+1][j]; } dp[i][j]/=m; } } printf("%.6lf\n",dp[1][0]); } }
相关文章推荐
- Windows UWP开发系列 – 3D变换
- app发布流程详解
- static
- 关于CSS的优先级,CSS优先级计算,多个class引用
- Android Tab切换表格头
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口
- 【小白装系统】——硬盘分区表格式GUID和MBR知识普及
- 理解JMS规范中的持久订阅和非持久订阅
- MySQL中的全文索引
- ubuntu不能正常使用make menuconfig的解决方案
- hdu 5500 Reorder the Books(模拟)
- OC 自动释放池学习笔记
- Java中Runnable和Thread的区别
- 开发专题指南: JEECG高速微云开发平台前言
- iOS 关于应用能打包但是不能提交至App Store的解决办法
- 四、机器学习系统设计笔记之主体模型
- Python 基础语法(二)
- 完全卸载oracle11g步骤
- 大话设计模式笔记 解释器模式
- 如何建立测试管理体系