欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1076


题意概括

  有n个东西,k次扔出来。每次等概率扔出其中一个。

  你可以拿这个东西,但是有条件,得在拿到指定东西之后再拿,否则白拿。

  拿到一个东西,会获得其权值。可以是负数。


题解

  状压dp跑一发。

  一开始想写正着dp的,因为我觉得这样听挺容易想的。

  然而网上的大牛都说是倒着的。于是我倒着了。

  方程是这样的:

  dp[i][j]表示扔出来i次之后,状态为j,在这之后可以得到的最大收益。

  dp[i][j]=(∑F[k])/n

  F[k]分两种情况。如果在状态j的情况下可以取k,那么F[k] = max(dp[i+1][j],dp[i+1][j | (1<<k)] + v[k])

    否则F[k] = dp[i+1][j]

  根据意义,最后输出dp[0][0]即可。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+,M=+,S=(<<)+;
int n,m,v[N],pre[N];
double dp[M][S];
int main(){
scanf("%d%d",&m,&n);
memset(pre,,sizeof pre);
for (int i=,p;i<n;i++){
scanf("%d",&v[i]);
while (scanf("%d",&p)&&p!=)
pre[i]|=<<(p-);
}
for (int i=m-;i>=;i--)
for (int j=;j<(<<n);j++){
dp[i][j]=;
for (int k=;k<n;k++)
if ((pre[k]&j)==pre[k])
dp[i][j]+=max(dp[i+][j],dp[i+][j|(<<k)]+v[k]);
else
dp[i][j]+=dp[i+][j];
dp[i][j]/=n;
}
printf("%.6lf",dp[][]);
return ;
}

BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划的更多相关文章

  1. [BZOJ1076][SCOI2008]奖励关(概率DP)

    Code #include <cstdio> #include <algorithm> #include <cstring> #define N 110 #defi ...

  2. 【BZOJ-1076】奖励关 概率与期望 + 状态压缩DP

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 891[Submit][Status ...

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

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

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

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

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

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

  6. Bzoj1076 [SCOI2008]奖励关

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1935  Solved: 1053 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一 ...

  7. [BZOJ1076][SCOI2008]奖励关解题报告|状压DP

    你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...

  8. BZOJ1076: [SCOI2008]奖励关【状压DP+期望DP】

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  9. BZOJ1076:[SCOI2008]奖励关(状压DP,期望)

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

随机推荐

  1. Anaconda3 指南

    Anaconda 是一个 Python 的生态.它包含很多的科学计算库和大数据处理工具等. $ python --version Python 3.6.1 :: Anaconda 4.4.0 (64- ...

  2. spoj gss1 gss3

    传送门 gss1 gss3 spoj gss系列=最大字段和套餐 gss1就是gss3的无单点修改版 有区间查询和单点修改,考虑用线段树维护 我们要维护区间权值和\(s\),区间最大前缀和\(xl\) ...

  3. 2017CCPC秦皇岛 C题Crusaders Quest&&ZOJ3983【模拟+STL】

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3983 题意: 给定9个血槽,有三种物品,每次可以把连续相同的物品抵消 ...

  4. $PollardRho$ 算法及其优化详解

    \(PollardRho\) 算法总结: Pollard Rho是一个非常玄学的算法,用于在\(O(n^{1/4})\)的期望时间复杂度内计算合数n的某个非平凡因子(除了1和它本身以外能整除它的数). ...

  5. id特性

    每一个HTML元素都可以附带id特性,id特 <!DOCTYPE html> <!-- To change this license header, choose License H ...

  6. 解决jdk1.7,1.8共存问题小思

    一 起因 随着jdk1.9呼之欲出之势,准备花点时间把jdk1.8搞掉,于是准备下一个项目的依赖改为jdk1.8,先去下载安装,安装好之后电脑上就存在两个版本的jdk.然后将两个版本的jdk路径都配置 ...

  7. 文加图, 理解Http请求与响应

    1. http请求和响应步骤 在讲解OkHttp之前, 我们首先来个高清大图, 看下http请求的整个步骤, 有个整体概念.  2. http每一步详细内容 在一次完整的HTTP通信过程中, Web浏 ...

  8. java Comparable 和 Comparator接口区别

    Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着“该类支持排序”.  即然实现Comparable接口的类支持排序,假设现在存在“实现C ...

  9. Ubuntu 14.04 apt-get更换阿里云源

    https://blog.csdn.net/satomic/article/details/78997611

  10. 改环境变量改出问题了,vi,ls这些命令都不能用了,怎么办

    1.出现这个问题肯定是以前的基本环境变量都用不了了(大部分情况就是多了一个空格) 解决办法: cd /usr/bin 下执行vi命令  修改环境变量  然后source /etc/profile   ...