欢迎访问~原文出处——博客园-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. CSS cursor 属性改变鼠标的样式

    可能的值 值 描述 url 需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默 ...

  2. python(nmap模块、多线程模块)

    http://xael.org/pages/python-nmap-en.html       nmap模块 http://www.tutorialspoint.com/python/python_m ...

  3. KVM 部署 日常操作

    KVM 安装 条件检测准备:CPU 虚拟化 ,现在物理机都支持. 开启cpu虚拟化 现在至强一般机器都有 cat /proc/cpuinfo |grep flags 需要全虚拟化支持为vmx(Inte ...

  4. JavaScript之数值计算

    //两等长数组对应元素之间做减法运算[可拓展:基本运算(+/-*//)] function array_dif(length,arrayA,arrayB){ var array = new Array ...

  5. Synchronized和lock的区别和用法

    一.synchronized和lock的用法区别 (1)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要 ...

  6. 如何成为软件测试职场“头号玩家”,月入10k+

    最近看了一部电影,叫<头号玩家>,电影挺不错的,延伸到自己的测试职业生涯,其实在我们的测试职场,也是存在头号玩家的,但并不是真的在玩,而是在努力工作. 不管是什么游戏,如果要玩通关升级,那 ...

  7. Vue项目实践中的功能实现与要点

    本贴记录项目实践中,各种功能的实现与技术要点,均有待改进. 路由切换的时候,显示loading动画 目前方案是: 在每个页面都手动装载一个loading组件组件的显示依赖vuex里面的一个值 , 在r ...

  8. android的五个进程优先级,内存不足时被清理的顺序

    Android操作系统尝试尽可能长时间的保持应用的进程,但当可用内存很低时最终要移走一部分进程.怎样确定那些程序可以运行,那些要被销毁,Android让每一个进程在一个重要级的基础上运行,重要级低的进 ...

  9. Mybatis入门学习笔记

    1.定义别名 在sqlMapConfig.xml中,编写如下代码: <!-- 定义别名 --> <typeAliases> <!-- type: 需要映射的类型 alia ...

  10. SIFT feature

    转载:http://www.cnblogs.com/wangguchangqing/p/4853263.html 1.SIFT概述 SIFT的全称是Scale Invariant Feature Tr ...